ParallelOptions.MaxDegreeOfParallelism Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define o número máximo de tarefas concorrentes habilitadas por esta ParallelOptions instância.
public:
property int MaxDegreeOfParallelism { int get(); void set(int value); };
public int MaxDegreeOfParallelism { get; set; }
member this.MaxDegreeOfParallelism : int with get, set
Public Property MaxDegreeOfParallelism As Integer
Valor de Propriedade
Um inteiro que representa o grau máximo de paralelismo.
Exceções
A propriedade está a ser definida a zero ou a um valor inferior a -1.
Observações
A MaxDegreeOfParallelism propriedade afeta o número de operações concorrentes executadas por Parallel chamadas de método que são ultrapassadas nesta ParallelOptions instância. Um valor de propriedade positivo limita o número de operações simultâneas ao valor definido. Se for -1, não há limite para o número de operações em execução simultânea (com exceção do ForEachAsync método, onde -1 significa ProcessorCount).
Por defeito, For e ForEach utilizará quantos threads o agendador subjacente fornecer, por isso mudar MaxDegreeOfParallelism do padrão limita apenas o número de tarefas concorrentes que serão usadas.
Geralmente, não precisa de modificar esta definição. No entanto, pode optar por defini-lo explicitamente em cenários de uso avançado como estes:
Quando sabes que um determinado algoritmo que estás a usar não vai escalar para além de um certo número de núcleos. Podes definir a propriedade para evitar desperdiçar ciclos em núcleos adicionais.
Quando está a executar vários algoritmos em simultâneo e quer definir manualmente quanto do sistema cada algoritmo pode utilizar. Pode definir um MaxDegreeOfParallelism valor para cada um.
Quando a heurística do pool de threads não consegue determinar o número correto de threads a usar e pode acabar por injetar demasiadas threads. Por exemplo, em iterações longas do corpo do loop, o pool de threads pode não conseguir distinguir entre progresso razoável, livelock ou deadlock, e pode não conseguir recuperar threads adicionados para melhorar o desempenho. Neste caso, podes definir a propriedade para garantir que não usas mais do que um número razoável de threads.