Изменить Parallel.ForEach MaxDegreeOfParallelism во время работы? - PullRequest
0 голосов
/ 06 мая 2018

Давайте представим, что у меня в коде работает Parallel.ForEach с ParallelOption MaxDegreeOfParallelism, установленным на Utils.Threads(), вот так:

Parallel.ForEach(linesList, new ParallelOptions { MaxDegreeOfParallelism = Utils.Threads() }, line => ...

Теперь представьте, что Utils.Threads() возвращает случайное целое число от 1 до 10.

Изменится ли MaxDegreeOfParallelism во время работы моего Parallel.ForEach, или он будет установлен на первый Utils.Threads() вызов за все время? Заранее спасибо.

1 Ответ

0 голосов
/ 06 мая 2018

Изменится ли MaxDegreeOfParallelism во время работы моего Parallel.ForEach, или будет установлен первый вызов Utils.Threads () за все время? Заранее спасибо.

Нет, не будет, так как он не продолжает проверять и изменять назначенное значение, которое требуется во время инициализации API. Infact, если вы просматриваете подпись MaxDegreeOfParallelism,

public int MaxDegreeOfParallelism { get; set; }

, поскольку его тип значения не является ссылочным типом, его integer, поэтому в любом случае значение копируется, оно никогда не передается для каких-либо изменений в значении, стандартное поведение типов значений

Воздействие MaxDegreeOfParallelism на Parallel.ForEach вызов

Это индикатор или подсказка, он не гарантирует, что много параллельных потоков будут выделены из пула до начала выполнения. Для Parallel.ForEach он всегда начинается с одного потока и добавляет возможность выполнения параллельно, в зависимости от количества задач и времени, которое они занимают. Это значение также внутренне модерируется, но это не значит, что вы можете предоставить очень высокое значение и ожидать, что будет создано много потоков. Хотя он ведет себя по-разному в случае PLinq, когда перед обработкой он ожидает, что большинство потоков будет инициализировано / инициализировано, но это может оказать неблагоприятное влияние на производительность, если для каждого потока недостаточно работы из-за переключения контекста

Пара справочных ссылок, касающихся DOP в C # Parallel / PLinq API:

Когда установить максимальную степень параллелизма

Макс. Степень параллелизма для AsParallel ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...