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.