Страницы

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

пятница, 24 января 2020 г.

Есть ли смысл ставить значение ParallelOptions.MaxDegreeOfParallelism больше кол-ва ядер процессора?

#c_sharp #net #многопоточность #распараллеливание


Есть ли смысл ставить значение ParallelOptions.MaxDegreeOfParallelism больше кол-ва
ядер процессора?

Видел, что некоторые в коде ставят MaxDegreeOfParallelism на 1 меньше, количества
ядер в прцоессоре, что бы оставить 1 ядро системе, а некоторые вообще умножают кол-во
ядер процессора на какую-то константу.
    


Ответы

Ответ 1



Смысла никакого нет ставить какое либо значение. ParallelOptions.MaxDegreeOfParallelism определяет верхнюю планку, а реальное количество потоков будет определено количеством свободных потоков в пуле. В свою очередь количество потоков в пуле определяется возможностями в системе (подробнее). Значение ParallelOptions.MaxDegreeOfParallelism нужно задавать если вам нужно по логике приложения ограничить одновременно выполняющиеся операции в единицу времени (например не больше 5, 10 .. n). Для того, что бы увеличить количество реально параллельно выполняющихся операций сначала нужно настроить ThreadPool: ThreadPool.SetMinThreads(500, 500); Но с этим нужно быть очень осторожным, каждый поток это накладные расходы. И что бы вручную регулировать ThreadPool нужны причины (например вы оптимизируете работу для определённой конфигурации железа).

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

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