Warum verursacht "while (true)" ohne "Thread.sleep" eine 100% ige CPU-Auslastung unter Linux, jedoch nicht unter Windows?

158

Ich habe ein einfaches Programm in Java erstellt:

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

Wenn ich dies auf einem Linux-Computer ausführe, wird die CPU zu 100% ausgelastet, das Betriebssystem wird jedoch nicht langsam angezeigt. Wenn ich jedoch unter Windows genau denselben Code ausführe, werden nur etwa 20% der CPU-Auslastung angezeigt.

Ich verwende Oracle JRE unter Windows und OpenJDK 6 unter Linux.

Ich frage mich, ob der Windows-Scheduler Threads zufällig vorbelegt und der Linux-Thread nicht?

Maniek
quelle
5
Dies hängt von der Zeitplanung der Betriebssystemaufgaben ab.
Subhrajyoti Majumder
52
Wie viele Kerne hast du? Der Windows-Task-Manager meldet 100%, wenn ALLE Kerne ausgelastet sind. Macht Ihr Linux-Tool etwas Ähnliches oder meldet es 100% für die Arbeit eines Kerns, und wenn alle Kerne beschäftigt sind, ist es das 100*N cores %?
Yiding
2
Ich habe 4 Kerne und unter Linux benutze ich das Systemmonitor-Tool
Maniek
1
@ Quoi Nicht wirklich. Wenn nur dieses Programm ausgeführt wird, wird der Thread unter Windows und Linux ohne Unterbrechung ausgeführt.
David Heffernan

Antworten:

387

Standardmäßig topläuft Linux unter dem sogenannten IRIX-Modus, der Windows Task-Manager jedoch nicht. Angenommen, Sie haben 4 Kerne:

  • Wenn der IRIX-Modus aktiviert ist, beträgt 1 voll ausgelasteter Kern 100% und 4 Kerne 400%.

  • Wenn der IRIX-Modus deaktiviert ist, beträgt 1 voll ausgelasteter Kern 25% und 4 Kerne 100%.

Dies bedeutet, dass unter topLinux standardmäßig eine Endlosschleife als ~ 100% und unter Windows als ~ 25% angezeigt wird und genau dasselbe bedeutet.

Sie können den IRIX-Modus umschalten, während Sie topmit Shift+ arbeiten i. Dadurch stimmen die Zahlen überein.

dieser andere Typ
quelle
2
Ja - auf einem '4 + 4' i7 (Hyperthreading) kommt eine triviale CPU-Schleife mit etwa 17-18% heraus.
Martin James
Warum hat der Antwortende zwar 150UPs, aber seine Punktzahl beträgt 700 ... ist es SO ein Fehler? : - /
uday
5
@uDaY, da es maximal 200 Wiederholungen pro Tag gibt, werden alle nachfolgenden Upvotes nicht gezählt, akzeptierte Antworten werden weiterhin verwendet.
sa_ddam213
3
@thatotherguy Wann genau Shift-I drücken, um umzuschalten? Während oben läuft?
Geek