ThreadPool.SetMinThreads(Int32, Int32) Método

Definição

Define o número mínimo de threads que o pool de threads cria sob demanda à medida que novas solicitações são feitas, antes de mudar para um algoritmo a fim de gerenciar a criação e a destruição de thread.

public:
 static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static bool SetMinThreads (int workerThreads, int completionPortThreads);
static member SetMinThreads : int * int -> bool
Public Shared Function SetMinThreads (workerThreads As Integer, completionPortThreads As Integer) As Boolean

Parâmetros

workerThreads
Int32

O número mínimo de threads de trabalho que o pool de threads cria sob demanda.

completionPortThreads
Int32

O número mínimo de threads de E/S assíncronos que o pool de threads cria sob demanda.

Retornos

true se a alteração for bem-sucedida; caso contrário, false.

Exemplos

O exemplo a seguir define o número mínimo de threads de trabalho como quatro e preserva o valor original para o número mínimo de threads de conclusão de E/S assíncronos.

using namespace System;
using namespace System::Threading;
int main()
{
   int minWorker;
   int minIOC;
   
   // Get the current settings.
   ThreadPool::GetMinThreads( minWorker, minIOC );
   
   // Change the minimum number of worker threads to four, but
   // keep the old setting for minimum asynchronous I/O
   // completion threads.
   if ( ThreadPool::SetMinThreads( 4, minIOC ) )
   {
      
      // The minimum number of threads was set successfully.
   }
   else
   {
      
      // The minimum number of threads was not changed.
   }
}
using System;
using System.Threading;

public class Test
{
    public static void Main()
    {
        int minWorker, minIOC;
        // Get the current settings.
        ThreadPool.GetMinThreads(out minWorker, out minIOC);
        // Change the minimum number of worker threads to four, but
        // keep the old setting for minimum asynchronous I/O 
        // completion threads.
        if (ThreadPool.SetMinThreads(4, minIOC))
        {
            // The minimum number of threads was set successfully.
        }
        else
        {
            // The minimum number of threads was not changed.
        }
    }
}
Imports System.Threading

Public Class Test

    <MTAThread> _
    Public Shared Sub Main()
        Dim minWorker, minIOC As Integer
        ' Get the current settings.
        ThreadPool.GetMinThreads(minWorker, minIOC)
        ' Change the minimum number of worker threads to four, but
        ' keep the old setting for minimum asynchronous I/O 
        ' completion threads.
        If ThreadPool.SetMinThreads(4, minIOC) Then
            ' The minimum number of threads was set successfully.
        Else
            ' The minimum number of threads was not changed.
        End If
    End Sub
End Class

Comentários

Não há suporte para esse método quando o pool de threads do Windows está configurado para ser usado em vez do pool de threads do .NET. Para obter mais informações, consulte a configuração do pool de threads do Windows.

O pool de threads fornece novos threads de trabalho ou threads de conclusão de E/S sob demanda até atingir o mínimo para cada categoria. Quando o mínimo é atingido, o pool de threads pode criar threads adicionais nessa categoria ou aguardar até que algumas tarefas sejam concluídas. A partir do .NET Framework 4, o pool de threads cria e destrói threads para otimizar a taxa de transferência, que é definida como o número de tarefas concluídas por unidade de tempo. Pouquíssimos threads podem não fazer um uso ideal dos recursos disponíveis, enquanto muitos threads podem aumentar a contenção de recursos.

Quando a demanda é baixa, o número real de threads do pool de threads pode ficar abaixo dos valores mínimos.

Se você especificar um número negativo ou um número maior que o número máximo de threads de pool de threads ativos (obtidos usando GetMaxThreads), SetMinThreads retornará false e não alterará nenhum dos valores mínimos.

Por padrão, o número mínimo de threads é definido como a contagem de processadores. Você pode usar SetMinThreads para aumentar o número mínimo de threads, como para contornar temporariamente problemas em que alguns itens de trabalho enfileirados ou tarefas bloqueiam threads do pool de threads. Esses bloqueios às vezes levam a uma situação em que todos os threads de conclusão de E/S ou de trabalho são bloqueados (fome). No entanto, aumentar o número mínimo de threads pode prejudicar o desempenho de outras maneiras, como:

  • O pool de threads pode agendar mais threads de trabalho, mesmo quando os threads de trabalho não estão sendo bloqueados. A sobrescrição pode fazer com que os threads agendados sejam significativamente atrasados à medida que esperam em uma fila longa para obter outra fatia de tempo, atrasando alguns itens de trabalho ou tarefas.
  • Os threads de trabalho podem levar mais tempo de CPU na remoção de itens de trabalho devido à necessidade de verificar mais threads para roubar o trabalho.
  • A alternância de contexto entre threads pode aumentar o uso da CPU.
  • A coleta de lixo pode levar mais tempo de CPU no andamento da pilha de threads.
  • O processo pode consumir mais memória.

Cuidado

Usar o SetMinThreads método para aumentar o número mínimo de threads pode causar problemas de desempenho, conforme descrito no texto anterior. Na maioria dos casos, o pool de threads terá um desempenho melhor com seu próprio algoritmo para alocar threads. Reduzir o mínimo para menos do que o número de processadores também pode prejudicar o desempenho.

Aplica-se a

Confira também