Насчет воркеров - с этой темой приходилось сталкивацо на крупных проектах, где с их помощью происходит сборка бандлов веб-приложения и его отправка на клиент маленькими порциями в неблокирующей манере. Если честно - достаточно узкое, хотя и интересное применение. Т.е "слышал и знаю", но практически применять не приходилось.

А как выяснилось, умные люди давно юзают воркеры в бигдате(бгыыы), js-геймдеве, числомолотилках,

Так что решил накидать маленькую прогу, которая шерстит простые числа и попутно смотрит, сколько же времени у нее уходит на поиск. И работает оно в двух режымах - или через создание thread_worker, или напрямую (сюда, если интересно)

Резалт следующий (Ищем простые числа в диапазоне от 0 до 2500000, контрольное время на i7-11700KF в однопоточном режиме - 1646мс):

Количество потоков i5-9400 (6), мс i7-11700KF (8 + 8), мс
1 1755 1679
3 973 508
6 305 180
9 245 180
12 229 105


По этому поводу воображаемые друзья говорят следующее:

  1. У воркеров достаточно большой оверхед. Развертывание и запитка затрачивают где-то 35-50 миллисекунд (зависит от камня, но разница минорная); И юзать их стоит там, где вычисление в однопотоке выжырает хотя бы 150-250мс

  2. Самый большой разгон (×5-6) на воркерах идет в диапазоне 4-6 процессов. И нет смысла плодить их больше, чем в камне ядер (в.т.ч. логических)

  3. На современных машинах, где даже у самых дохлых камней есть хотя бы четыре ядра, нужно затачиваться на многопоточность там, где это реально (т.е нет явной зависимости резалтов поздних этапов расчетов от более ранних вычислений, так что решение ОДУ пролетает). Обработка корпстинок или всякие итеративные расчеты - пжлста. Возможно, что обсчет особенно толстых СЛАУ


P.S.
А теперь йа иду разжыжать свой мозг, опасно приблизившыйся к точке ступора мозговины и расслоения мозжечка