Pool de threads versus muitos threads individuais
Estou no meio de um problema em que não consigo decidir qual solução tomar.
O problema é um pouco único. Vamos colocar desta forma, estou recebendo dados da rede continuamente (2 a 4 vezes por segundo). Agora, cada dado pertence a um diferente, digamos, grupo. Agora, vamos chamar esses grupos, group1, group2 e assim por diante.
Cada grupo tem uma fila de trabalhos dedicada na qual os dados da rede são filtrados e adicionados ao seu grupo correspondente para processamento.
No começo eu criei um thread dedicado por grupo que pegava os dados da fila de tarefas, processava-os e depois entrava no estado de bloqueio (usando o Linked Blocking Queue).
Mas o meu senior sugeriu que eu deveria usar pools de threads porque desta maneira os threads não serão bloqueados e poderão ser usados por outros grupos para processamento.
Mas aqui está a coisa, os dados que estou obtendo são rápidos o suficiente e o tempo que um encadeamento leva para processá-lo é longo o suficiente para que o encadeamento, possivelmente, não entre no modo de bloqueio. E isso também garantirá que os dados sejam processados sequencialmente (o job 1 é executado antes do job 2), o que, no pool, tem pouquíssimas chances, pode não acontecer.
Meu senior também está empenhado no fato de que o pool também vai nos poupar muita memória, porque os threads são POOLED (estou pensando que ele realmente foi para a palavra;)). Enquanto eu não concordo com isso porque, eu pessoalmente acho, agrupados ou não cada segmento recebe sua própria memória de pilha. A menos que haja algo em pools de threads que eu não conheço.
Uma última coisa, sempre achei que o pool ajuda onde os trabalhos aparecem em um grande número por um curto período de tempo. Isso faz sentido porque a desova de thread seria uma perda de desempenho porque o tempo gasto para iniciar um thread é muito mais do que o tempo gasto fazendo o trabalho. Então agrupar ajuda muito aqui.
Mas no meu caso group1, group2, ..., groupN sempre permanecem vivos. Então, se houver dados ou não, eles ainda estarão lá. Então a desova do thread não é o problema aqui.
Meu senior não está convencido e quer que eu vá com a solução de pooling porque sua pegada de memória é ótima.
Então, qual caminho seguir?
Obrigado.