А как выяснилось, умные люди давно юзают воркеры в бигдате(бгыыы), 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 |
По этому поводу воображаемые друзья говорят следующее:
- У воркеров достаточно большой оверхед. Развертывание и запитка затрачивают где-то 35-50 миллисекунд (зависит от камня, но разница минорная); И юзать их стоит там, где вычисление в однопотоке выжырает хотя бы 150-250мс
- Самый большой разгон (×5-6) на воркерах идет в диапазоне 4-6 процессов. И нет смысла плодить их больше, чем в камне ядер (в.т.ч. логических)
- На современных машинах, где даже у самых дохлых камней есть хотя бы четыре ядра, нужно затачиваться на многопоточность там, где это реально (т.е нет явной зависимости резалтов поздних этапов расчетов от более ранних вычислений, так что решение ОДУ пролетает). Обработка корпстинок или всякие итеративные расчеты - пжлста. Возможно, что обсчет особенно толстых СЛАУ
P.S.
А теперь йа иду разжыжать свой мозг, опасно приблизившыйся к точке ступора мозговины и расслоения мозжечка