O que é um número razoável de threads para um programa Java?

5

Em Java (ou provavelmente na maioria das outras linguagens que visam a JVM), qual é o número razoável de threads a serem usados? Presumivelmente, isso será expresso como uma razão para o número de núcleos / processadores disponíveis, correto?

Pelo menos inicialmente, parece que o dobro do número de núcleos pode fazer sentido, mas 20 + vezes mais parece irracional. A proporção provavelmente será afetada pelo tipo e / ou arquitetura do software? Existem tipos de software e / ou situações em que um número muito maior de threads realmente faz sentido?

[E sim, eu sei que isso é formulado como um número de perguntas separadas, mas eu acho que elas são relacionadas o bastante para uma única resposta para cobrir todas elas, já que elas são realmente sobre quantos tópicos fazem sentido sob que circunstâncias.]

    
por 3Dave 23.02.2012 / 16:51
fonte

1 resposta

5

Muitos comentários, mas ainda sem resposta. Aqui está uma tentativa rápida ...

Eu diria que isso depende do que seus tópicos estão fazendo. Você pode ter centenas de tópicos, mas se a grande maioria deles estiver apenas esperando, eles não incorrerão em muita sobrecarga. Por outro lado, se você estiver fazendo computação, eu limitaria o número de encadeamentos ao número de núcleos. Você não terá mais velocidade de computação extra do que agendar mais. Além disso, nesses casos, talvez você queira examinar o paralelismo de tarefas como uma alternativa.

Se o seu código é uma mistura de espera e processamento, a resposta é menos clara. Além de várias estratégias que você pode adotar para acelerar as coisas, sua melhor aposta nesse caso é fazer o perfil para encontrar um número ideal.

    
por 28.02.2012 / 02:38
fonte