Книга Clean Code Боба Мартина содержит следующее правило о параллельном программировании:
Запуск с большим количеством потоков, чем с процессорами. Что происходит, когда система переключаетсямежду задачами. Чтобы стимулировать обмен задач, запускайте с большим количеством потоков, чем с процессорами или ядрами. Чем чаще ваши задачи меняются местами, тем больше вероятность того, что вы столкнетесь с кодом, в котором отсутствует критическая секция или возникает тупик.
Я рассматривал такие приятные моменты параллелизма, как взаимоблокировки, условия гонки и т. Д. ... чтобы быть характеристикой параллелизма как такового, независимо от того, управляются ли наши потоки одним ядром (с переключением) или несколькими.
Так в чем же смысл правила? Это просто какая-то эвристика? Какие конкретные проблемы связаны с переключением контекста? (Я знаю, что переключение контекста вызывает бремя накладных расходов, но разве это не совет по этому поводу?).