ThreadPool.QueueUserWorkItem vs Task.Fabrica.Início

Qual é a diferença entre os valores abaixo

ThreadPool.QueueUserWorkItem

Vs

Task.Factory.StartNew

Se o código acima é chamado 500 vezes para uma tarefa longa, isso significa que todos os tópicos do grupo de linhas serão ocupados?

ou a TPL (segunda opção) será suficientemente inteligente para aceitar threads com menor ou igual número de processadores?

Author: stackoverflowuser, 2012-02-09

1 answers

Se vai iniciar uma tarefa de longa duração com o TPL, deve especificar TaskCreationOptions.LongRunning, o que significa que ele não o agendou na lista de linhas. (EDIT: como observado nos comentários, este é uma decisão específica do scheduler, e não é uma garantia dura e rápida, mas espero que qualquer escalonador de produção sensato evite agendar tarefas de longa duração em um grupo de threads.)

Não devias agendar um grande número de tarefas a longo prazo. junta-te a nós. Eu acredito que hoje em dia o tamanho padrão da linha pool é bastante grande (porque muitas vezes é abusado desta forma), mas fundamentalmente não deve ser usado assim.

O ponto do conjunto de fios é evitartarefas curtas tomar um grande sucesso de criar um novo tópico, em comparação com o tempo que eles estão realmente a correr. Se a tarefa estiver em execução por um longo tempo, o impacto de criar um novo tópico será relativamente pequeno de qualquer maneira - e você não quer acabar potencialmente a ficar sem tópicos de bilhar de linhas. (É menos provável agora, mas eufiz experimentá-lo em versões anteriores da. NET.)

Pessoalmente, Se eu tivesse a opção, eu definitivamente usaria TPL com o fundamento de que a API {[[2]} é muito boa-mas do lembre-se de dizer à TPL que espera que a tarefa dure por muito tempo.

Editar: como indicado nos comentários, Veja também o post da equipa da PFX no escolher entre a TPL e o grupo de tópicos:

Em conclusão, vou reiterar o que o desenvolvedor de ThreadPool da equipa da CLR já disse:

Task is now the preferred way to queue work to the thread pool.

Editar: também a partir de comentários, não se esqueça que o TPL lhe permite usar escalonadores personalizados, Se realmente quiser...

 87
Author: Jon Skeet, 2012-02-08 21:50:04