Страницы

Поиск по вопросам

понедельник, 1 октября 2018 г.

Почему во многопоточных приложениях нужно создавать n+1 рабочих потоков?

Где n - количество физических ядер. Не раз уже встречаю это правило, но никак не могу понять зачем так делать и всегда ли оно эффективнее создания n потоков.


Ответ

но никак не могу понять зачем так делать
Как правило, программы "общего назначения", кроме, собственно, расчетов выполняют операции ввода-вывода (диск, сеть, прочие устройства). На время ожидания медленных операций ядро неплохо бы загрузить полезной работой. Поэтому добавляют +1. Почему +1 а не более? Сейчас не найду - но помню точно, видел бэйнчмарки для make -jN. Практически везде выигрывала комбинация +1. Таким образом, устоявшаяся практика - имеет чисто экспериментальную аргументацию.
и всегда ли оно эффективнее создания n потоков
Не всегда. Если процессы заняты исключительно пересчетами, и доля I/O-операций ничтожно мала - добавление "дополнительного" потока суммарной скорости не прибавит. Более того, возможно скорость незначительно упадет.

Комментариев нет:

Отправить комментарий