C # - Quando usar threads padrão, ThreadPool e TPL em um servidor de alta atividade

Eu tenho lido muito sobre threading ultimamente, procurando desenvolver um servidor TCP escalável e de alto desempenho capaz de lidar com até 10.000 a 20.000 clientes, cada um dos quais está se comunicando consistentemente bidirecionalmente ao servidor com um comando: sistema baseado. O servidor receberá um comando e executará uma única (ou muitas) tarefas conforme o comando. Minha pergunta é como usar adequadamente as construções de encadeamento do .NET para uma variedade de situações, executando tarefas que podem levar entre um minuto e várias horas, dependendo do trabalho que está sendo executad

O que mais me confunde é o fato de que em todos os lugares que leio, vejo algo como "usar um Thread criado manualmente (ou pool de threads personalizado) para lidar com tarefas 'de longa execução' e usar o TPL para tarefas de curta duração ou tarefas que requerem processamento paralelo ". O que exatamente uma tarefa de longa duração? São 5 segundos, 60 segundos, uma hora?

Com qual período de tempo devo usar cada um desses três métodos para criar threads:

Threads criados manualmenteA classe .NET ThreadPool TPL

Outro problema que eu contemplei é o seguinte - digamos que meu servidor tenha 20.000 clientes conectados, cada um dos quais envia 1 comando (que pode ser traduzido para uma ou várias tarefas) por segundo. Mesmo com hardware poderoso, não há uma chance de eu estar sobrecarregando muito a carga de trabalho em qualquer fila de itens de trabalho / pool de encadeamentos que possua, gerando uma OutOfMemoryException depois que a fila preenche lentamente o máximo?

Qualquer insight seria muito apreciad

questionAnswers(4)

yourAnswerToTheQuestion