Warum verursacht „while(true)“ ohne „Thread.sleep“ 100 % CPU-Auslastung unter Linux, aber nicht unter Windows?

Lesezeit: 2 Minuten

Benutzer-Avatar
Maniek

Ich habe ein einfaches Programm in Java erstellt:

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

Wenn ich dies auf einem Linux-Rechner ausführe, zeigt es 100 % CPU-Auslastung an, führt aber nicht dazu, dass das Betriebssystem langsam erscheint. Wenn ich jedoch genau denselben Code unter Windows ausführe, zeigt er nur etwa 20 % CPU-Auslastung an.

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

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

  • Dies hängt von der Aufgabenplanung des Betriebssystems ab.

    – Subhrajyoti Majumder

    29. Januar 2013 um 9:07 Uhr


  • 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 von 1 Kern, und wenn alle Kerne beschäftigt sind, ist es 100*N cores %?

    – Yiding

    29. Januar 2013 um 9:08 Uhr

  • Ich habe 4 Kerne und unter Linux verwende ich das Systemmonitor-Tool

    – Maniek

    29. Januar 2013 um 9:10 Uhr

  • @Quoi Nicht wirklich. Wenn nur dieses Programm ausgeführt wird, wird der Thread sowohl unter Windows als auch unter Linux ohne Unterbrechung ausgeführt.

    – David Heffernan

    29. Januar 2013 um 9:26 Uhr

Benutzer-Avatar
dieser andere Typ

Standardmäßig, top läuft unter Linux im sogenannten IRIX-Modus, der Task-Manager von Windows dagegen nicht. Angenommen, Sie haben 4 Kerne:

  • Bei aktiviertem IRIX-Modus beträgt 1 voll ausgelasteter Kern 100 % und 4 Kerne 400 %.

  • Bei ausgeschaltetem IRIX-Modus beträgt 1 voll ausgelasteter Kern 25 % und 4 Kerne 100 %.

Das bedeutet, dass standardmäßig top Unter Linux wird eine Endlosschleife als ~ 100% und unter Windows als ~ 25% angezeigt, und es bedeutet genau dasselbe.

Sie können den IRIX-Modus währenddessen umschalten top läuft mit Wechsel+ich. Dadurch werden die Zahlen übereinstimmen.

  • Yup – auf einem ‘4+4’ i7 (Hyperthreading) kommt eine triviale CPU-Schleife auf etwa 17-18%.

    – Martin Jakob

    29. Januar 2013 um 12:55 Uhr

  • Warum hat der Antwortende, obwohl er 150UPs hat, immer noch 700 Punkte? :-/

    – uday

    30. Januar 2013 um 0:56 Uhr

  • @uDaY, da es maximal 200 Wiederholungen pro Tag gibt, werden alle Upvotes danach nicht gezählt, akzeptierte Antworten werden es immer noch sein.

    – sa_ddam213

    30. Januar 2013 um 1:38 Uhr

  • @thatotherguy Wann genau Shift-I drücken, um umzuschalten? Während oben läuft ?

    – Aussenseiter

    30. Januar 2013 um 4:18 Uhr

1345150cookie-checkWarum verursacht „while(true)“ ohne „Thread.sleep“ 100 % CPU-Auslastung unter Linux, aber nicht unter Windows?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy