Quantos threads são executados simultaneamente?

1

A saída de WMIC :

C:\Users\fra>WMIC CPU Get DeviceID,NumberOfCores,NumberOfLogicalProcessors
DeviceID  NumberOfCores  NumberOfLogicalProcessors
CPU0      4              8

C:\Users\fra>

Diz-me que tenho 4 núcleos e 8 processadores. Em relação ao desenvolvimento de aplicativos Java, quantos encadeamentos simultâneos são efetivamente executados? Se eu iniciar 32 threads que são tarefas de longa duração, todas elas serão executadas simultaneamente?

O processador é:

Intel i7-4800MQ CPU @2.70GHz
    
por user3111525 27.05.2014 / 11:41

1 resposta

2

A resposta curta: talvez e mais ou menos.

Cada núcleo não pode fazer mais trabalho do que uma coisa de cada vez, ou mais de uma coisa por carrapato. O sistema operacional, no entanto, pode agendar o trabalho para muitos processos por núcleo por qualquer unidade maior que um tick. Esta é uma maneira simples de analisar o hyper-threading.

Se um aplicativo tiver longos períodos de espera, então 32 threads podem ser facilmente carregados na memória e executados simultaneamente com pouco ou nenhum impacto no desempenho, o que eu suponho ser realmente a questão. Se 32 encadeamentos com uso intensivo de computação fossem criados, os ciclos de trabalho mais longos versus os ciclos de espera mais curtos anulariam a ilusão de trabalho simultâneo.

Realmente, esperamos que se o seu objetivo for 32 threads, você tem um motivo para escolher esse número e é dinâmico para o futuro. Um processador pode manipular 32 threads bem, outro pode sufocar e em 5-10 anos 32 threads podem ser menos de um thread por núcleo físico. Independentemente disso, testar o aplicativo com 4, 8, 16 e 32 encadeamentos para ver qual deles conclui o trabalho mais rapidamente em seu aplicativo seria melhor para ver se a carga de trabalho se adapta bem ao seu objetivo de 32 encadeamentos.

    
por 27.05.2014 / 12:41