Possible en double:
Would a multithreaded Java application exploit a multi-core machine very well?utilisation du processeur Dual-core w/unique thread Java en cours d'exécution
J'ai un fil Java pur et simple comme celui-ci en cours d'exécution sur ma machine dual-core (Environnement Windows XP 32 bits)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
Je m'attendais à ce que je m'en tiens à un seul CP U pour exploiter pleinement le cache haute vitesse (puisque dans la boucle nous continuons à fonctionner avec la variable locale j, une utilisation du processeur serait donc 100% et l'autre serait à peu près inactif. À ma grande surprise, les deux CPU sont utilisés à environ 40% ~ 60% après le démarrage du thread et l'utilisation d'un processeur est légèrement supérieure à l'autre.
Ma question est la suivante: Existe-t-il un mécanisme d'équilibrage de la charge du système d'exploitation qui intervient lorsqu'un déséquilibre a été détecté? Dans mon cas, est-il possible que Windows OS a trouvé qu'un processeur atteint presque 100% et l'autre est presque inactif, donc il replie le thread vers un autre CPU périodiquement?
# EDIT1 J'ai trouvé une explication possible: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
Oui, le système d'exploitation fera rebondir les threads. – Mysticial
Je pense que cette question a déjà été répondu http://stackoverflow.com/questions/1649402/would-a-multithreaded-java-application-exploit-a-multi-core-machine-very-well – parion
Et sachez que la plupart des programmes Java essaieront d'utiliser un noyau et resteront avec un noyau, comme je l'ai découvert avec Minecraft. Voici une histoire d'un gars qui a trouvé cela avec son nouvel ordinateur http://mlee888.wordpress.com/2006/03/31/java-performance-in-dual-coremultiprocessor-environment/ – parion