Duplicar posible:
Would a multithreaded Java application exploit a multi-core machine very well?doble núcleo utilización de la CPU w solo hilo/Java que se ejecuta
tengo un hilo de Java simple y sencillo como esto se ejecuta en mi máquina de doble núcleo (Entorno de 32 bits de Windows XP)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
Mi expectativa era que se pegaría a un único CP U para aprovechar al máximo la caché de alta velocidad (ya que en el ciclo seguimos operando con la variable local j, por lo tanto, una utilización de la CPU sería del 100% y la otra estaría prácticamente inactiva). Para mi sorpresa, ambas CPU se están utilizando a aproximadamente 40% ~ 60% después de que se inicia el hilo y la utilización de una CPU es ligeramente más alta que la otra.
Mi pregunta es: ¿Hay algún mecanismo de equilibrio de carga del sistema operativo que se active cuando se haya detectado un desequilibrio? En mi caso, ¿es posible que el sistema operativo Windows haya detectado que una CPU está alcanzando casi el 100% y la otra está casi inactiva, por lo que reprograma el hilo a otra CPU periódicamente?
# EDIT1 he encontrado una posible explicación: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
Sí, el SO rebotará los hilos. – Mysticial
Creo que esta pregunta ya ha sido respondida http://stackoverflow.com/questions/1649402/would-a-multithreaded-java-application-exploit-a-multi-core-machine-very-well – parion
Y tenga en cuenta que la mayoría de los programas de Java intentarán usar un núcleo y permanecer con un núcleo, como descubrí con Minecraft. Aquí hay una historia de un chico que descubrió esto con su nueva computadora http://mlee888.wordpress.com/2006/03/31/java-performance-in-dual-coremultiprocessor-environment/ – parion