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