O que é um pool de threads? Por que usar pools de threads? Como usar pools de threads?
1. O que é um pool de fios?
A classe ThreadPool do .NET Framework fornece um pool de threads que pode ser usado para executar tarefas, enviar itens de trabalho, lidar com E/S assíncronas, esperar em nome de outras threads e gerenciar temporizadores. Então, o que é um pool de threads? O pool de threads é, na verdade, um "pool" que armazena objetos de threads e fornece alguns métodos básicos, como definir o número mínimo/máximo de threads no pool, enfileirar os métodos a serem executados, etc. ThreadPool é uma classe estática, então pode ser usada diretamente sem criar objetos.
2. Por que usar pools de threads? Quais são os benefícios?
O site oficial da Microsoft diz o seguinte: Muitos aplicativos criam um grande número de threads que estão em espera, esperando que eventos ocorram. Também há muitos tópicos que podem entrar em hibernação só para acordar periodicamente e consultar informações de estado alteradas ou atualizadas. Pools de threads, permitindo que você use threads de forma mais eficiente através de um pool de threads de trabalho gerenciado pelo sistema.
Simplificando, cada nova thread precisa ocupar espaço de memória e outros recursos, e com tantas threads novas, muitas delas estão dormentes ou esperando que recursos sejam liberados. Existem muitas threads que fazem apenas um pequeno trabalho periodicamente, como atualizar dados, etc., que são muito desperdiçadores para serem desenhados, e é raro que um grande número de threads surja em programação real e termine em um curto período de tempo. Portanto, foi proposto o conceito de pools de threads. Se a aplicação fizer outra requisição para o pool de threads, a thread no estado pendente é ativada e executa a tarefa sem criar uma nova thread, o que economiza muito sobretrabalho. O sistema destruirá automaticamente as threads apenas quando o número de threads atingir o número máximo de threads. Portanto, usar pools de threads pode evitar grandes custos de criação e destruição, ter melhor desempenho e estabilidade e, em segundo lugar, os desenvolvedores podem focar em outras tarefas ao transferir as threads para a gestão do sistema.
3. Como uso pools de threads?
Na verdade, os pools de threads são muito simples de usar, da seguinte forma
a. Defina o máximo e o pool mínimo de threads:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Defina o número de solicitações para um pool de threads que podem estar ativos ao mesmo tempo. Todas as solicitações maiores que esse número permanecerão em fila até que a thread pool fique disponível. Você também pode definir o número mínimo de threads.
b. Adicionar tarefas ao pool de threads:
ThreadPool.QueueUserWorkItem (novo WaitCallback(nome do método));
ou ThreadPool.QueueUserWorkItem (novo WaitCallback(nome do método), parâmetro);
Por exemplo, se um máximo de 5 threads no pool de threads executa um método 60 vezes, o salário total para 5 anos é o seguinte:
Se você não usar pooling de threads, pode ser necessário abrir 60 threads para executar o método Run() de forma assíncrona, o que é um desperdício de recursos de espaço. Agora usamos até 5 threads, que podem ser executados em 1 segundo, e a eficiência e o desempenho são muito bons.
|