A principal necessidade de threads de theadpool é lidar com pequenas tarefas curtas que devem ser concluídas quase que instantaneamente. Os manipuladores de interrupção de hardware geralmente são executados em um contexto de empilhamento que não seria adequado para código que não é do kernel, mas um manipulador de interrupção de hardware pode descobrir que um retorno de chamada de conclusão de E / S no modo de usuário deve ser executado o mais rápido possível. Criar um novo encadeamento com o objetivo de executar uma coisa dessas seria um exagero enorme. Ter alguns encadeamentos pré-criados que podem ser despachados para executar retornos de chamada de conclusão de E / S ou outras coisas semelhantes é muito mais eficiente.
Um aspecto fundamental desses encadeamentos é que, se os métodos de conclusão de E / S sempre são concluídos essencialmente instantaneamente e nunca bloqueiam, e o número de encadeamentos que atualmente estão executando esses métodos é pelo menos igual ao número de processadores, a única maneira de qualquer outro encadeamento pode ser executado antes que um dos métodos mencionados termine, se um dos outros métodos bloquear ou se o tempo de execução exceder um intervalo de tempo de segmentação normal; nenhum deles deve ocorrer com muita frequência se o conjunto de encadeamentos for usado como pretendido.
Se não se espera que um método saia dentro de 100ms aproximadamente quando inicia a execução, o método deve ser executado por outros meios que não o pool principal de threads. Se houver muitas tarefas a serem executadas que consomem muita CPU, mas não bloqueiam, pode ser útil despachá-las usando um conjunto de encadeamentos de aplicativos (um por núcleo de CPU) que é separado do conjunto de encadeamentos "principal", pois o uso mais threads do que núcleos serão contraproducentes ao executar tarefas que não consomem muita energia da CPU. Se, no entanto, um método demorar um segundo ou mais para ser executado e passar a maior parte do tempo bloqueado, o método provavelmente deverá ser executado em um encadeamento dedicado e quase certamente não deverá ser executado em um encadeamento de conjunto de encadeamentos principais. Se uma operação de longa duração precisar ser acionada por algo como um retorno de chamada de E / S,