Pourquoi «while (true)» sans «Thread.sleep» cause-t-il une utilisation à 100% du processeur sous Linux mais pas sous Windows?


158

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 une utilisation du processeur à 100%, mais ne fait pas paraître le système d'exploitation lent. Cependant, si j'exécute exactement le même code sous Windows, cela ne montre qu'environ 20% d'utilisation du processeur.

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

Je me demande si le planificateur de Windows préempte les threads au hasard et pas celui de Linux?


5
Cela dépend de la planification des tâches du système d'exploitation.
Subhrajyoti Majumder

52
combien de cœurs avez-vous? Le gestionnaire de tâches Windows rapporte 100% lorsque TOUS les cœurs sont occupés. Votre outil Linux fait-il quelque chose de similaire, ou rapporte-t-il 100% pour 1 core de travail, et quand tous les cœurs sont occupés, c'est 100*N cores %?
yiding le

2
J'ai 4 cœurs et sur Linux, j'utilise l'outil de surveillance du système
Maniek

1
@Quoi Pas vraiment. Si ce programme est tout ce qui est en cours d'exécution, le thread fonctionnera sans interruption à la fois sous Windows et Linux.
David Heffernan

Réponses:


387

Par défaut, topsous Linux s'exécute en mode dit IRIX, contrairement au gestionnaire de tâches Windows. Disons que vous avez 4 cœurs:

  • Avec le mode IRIX activé, 1 cœur pleinement utilisé correspond à 100% et 4 cœurs à 400%.

  • Avec le mode IRIX désactivé, 1 cœur entièrement utilisé correspond à 25% et 4 cœurs à 100%.

Cela signifie que par défaut, topsous Linux affichera une boucle infinie à ~ 100% et Windows l'affichera à ~ 25%, et cela signifie exactement la même chose.

Vous pouvez basculer le mode IRIX en topcours d'exécution avec Shift+ i. Cela fera correspondre les nombres.


2
Ouais - sur un i7 '4 + 4', (hyperthreading), une boucle CPU triviale sort à environ 17-18%.
Martin James

Pourquoi le répondeur a-t-il encore 150UPs, son score est de 700 ... est-ce vraiment un bug ?? : - /
mercredi

5
@uDaY, car il y a un maximum de 200 représentants par jour, les votes positifs après cela ne sont pas comptés, les réponses acceptées le seront toujours.
sa_ddam213

3
@thatotherguy Quand exactement appuyer sur shift-I pour basculer? Pendant que top fonctionne?
Geek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.