Otimização de encadeamento Java com 100% de uso da CPU
Eu tenho um aplicativo que aceita o trabalho em uma fila e, em seguida, gira esse trabalho para ser concluído em segmentos independentes. O número de threads não é enorme, digamos até 100, mas são tarefas intensivas e podem aumentar rapidamente a CPU em até 100%.
Para fazer o máximo possível o trabalho mais rápido: será melhor lançar mais threads quando precisar trabalhar mais e deixar o agendador de encadeamentos Java manipular a distribuição do trabalho ou ficar mais inteligente e gerenciar a carga de trabalho para manter a CPU abaixo? 100% me deixa mais rápido?
A máquina é dedicada ao meu aplicativo java.
EDITAR:
Obrigado pela fantástica entrada!
As tarefas são de complexidade variada e envolvem E / S, portanto, ter um conjunto de threads baixo de, digamos, 4 pode estar apenas executando a CPU em 20%. Não tenho como saber quantas tarefas realmente levarão a CPU a 100%.
Meu pensamento era se eu monitorava a CPU através do RMI e discava dinamicamente o trabalho para cima e para baixo, ou deveria simplesmente não me importar e deixar o SO lidar com isso.