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?

Maniek
la source
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.

cet autre gars
la source
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