158 votes

Pourquoi "while (true)" sans "Thread.sleep" entraîne-t-il une utilisation du processeur à 100% sous Linux mais pas sous Windows?

J'ai créé un programme simple en Java:

 public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}
 

Si je l'exécute sur une machine Linux, cela montre 100% de l'utilisation du processeur, mais cela ne fait pas apparaître le système d'exploitation lent. Cependant, si je cours exactement le même code sur Windows, cela ne montre que 20% d'utilisation du processeur.

J'utilise Oracle JRE sur Windows et OpenJDK 6 sur Linux.

Je me demande si le programmateur de Windows préempte les threads aléatoirement et pas Linux?

388voto

that other guy Points 26297

Par défaut, top sur Linux fonctionne avec IRIX mode (appuyez sur maj-je pour alterner). Avec IRIX mode sur, sur, par exemple, un 4 système de base, haut affichera 1 entièrement utilisé de base à 100%, et de 4 cœurs à 400%. Avec IRIX mode off, il montre 1 de base de 25% et 4 cores à 100%.

Le gestionnaire des tâches de Windows est la même que haut avec irix mode off.

En d'autres termes, par défaut, sur un 4 coeur du système, Linux va montrer une boucle infinie ~100% et Windows va montrer que ~25%, donc il n'y a probablement pas de différence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X