ThreadPool.SetMinThreads(Int32, Int32) Método
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.
Define o número mínimo de threads que o pool de threads cria a pedido, à medida que novos pedidos são feitos, antes de mudar para um algoritmo para gerir a criação e destruição de threads.
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 worker que o pool de threads cria a pedido.
- completionPortThreads
- Int32
O número mínimo de threads de I/O assíncronas que o pool de threads cria a pedido.
Devoluções
true se a alteração for bem-sucedida; caso contrário, false.
Exemplos
O exemplo seguinte define o número mínimo de threads de trabalho para quatro e preserva o valor original para o número mínimo de threads de conclusão de E/S assíncronas.
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
Observações
Este método não é suportado quando o pool de threads do Windows está configurado para ser usado em vez do pool de threads .NET. Para mais informações, consulte a definição de configuração do pool de threads Windows.
O pool de threads fornece novos threads worker ou threads de conclusão de I/O 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 esperar que algumas tarefas sejam concluídas. A partir do .NET Framework 4, o pool de threads cria e destrói threads para otimizar o rendimento, que é definido como o número de tarefas que são concluídas por unidade de tempo. Poucos threads podem não fazer o uso ideal dos recursos disponíveis, enquanto muitos threads podem aumentar a contenção de recursos.
Quando a procura é baixa, o número real de threads no pool pode ficar abaixo dos valores mínimos.
Se especificar um número negativo ou um número superior ao número máximo de threads ativos do pool de threads (obtidos usando GetMaxThreads), SetMinThreads retorna false e não altera nenhum dos valores mínimos.
Por defeito, o número mínimo de threads é definido para o número de processadores. Podes usar SetMinThreads para aumentar o número mínimo de threads, como para contornar temporariamente problemas em que alguns itens de trabalho ou tarefas em fila bloqueiam threads do pool de threads. Esses bloqueios por vezes levam a uma situação em que todos os fios de conclusão de trabalhadores ou I/O ficam bloqueados (fome). No entanto, aumentar o número mínimo de threads pode degradar o desempenho de outras formas, tais como:
- O pool de threads pode agendar mais threads de trabalho, mesmo quando os threads de trabalho não estão a ser bloqueados. O excesso de subscrição pode causar atrasos significativos em threads que são agendados, pois esperam numa longa fila para obter outro intervalo de tempo, atrasando alguns itens de trabalho ou tarefas.
- Threads de trabalho podem demorar mais tempo de CPU a eliminar itens de trabalho devido à necessidade de digitalizar mais threads para roubar trabalho.
- A troca de contexto entre threads pode aumentar o uso da CPU.
- A recolha de lixo pode demorar mais tempo de CPU na caminhada da pilha de threads.
- O processo pode consumir mais memória.
Atenção
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 o seu próprio algoritmo para alocação de threads. Reduzir o mínimo para menos do que o número de processadores também pode prejudicar o desempenho.