Dlaczego „while (true)” bez „Thread.sleep” powoduje 100% użycie procesora w systemie Linux, ale nie w systemie Windows?

158

Stworzyłem prosty program w java:

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

Jeśli uruchomię to na komputerze z systemem Linux, pokazuje 100% użycie procesora, ale nie powoduje spowolnienia systemu operacyjnego. Jeśli jednak uruchomię dokładnie ten sam kod w systemie Windows, pokazuje on tylko około 20% wykorzystania procesora.

Używam Oracle JRE w systemie Windows i OpenJDK 6 w systemie Linux.

Zastanawiam się, czy program planujący Windows losowo wywłaszcza wątki, a Linux nie?

Maniek
źródło
5
Zależy to od harmonogramu zadań systemu operacyjnego.
Subhrajyoti Majumder
52
ile masz rdzeni? Menedżer zadań Windows zgłasza 100%, gdy WSZYSTKIE rdzenie są zajęte. Czy Twoje narzędzie linuxowe robi coś podobnego, czy też raportuje 100% wartości pracy 1 rdzenia, a kiedy wszystkie rdzenie są zajęte, to prawda 100*N cores %?
jiding
2
Mam 4 rdzenie i na Linuksie używam narzędzia do monitorowania systemu
Maniek
1
@Quoi Niezupełnie. Jeśli ten program jest wszystkim, co jest uruchomione, wątek będzie działał bez przerwy zarówno w systemie Windows, jak i Linux.
David Heffernan,

Odpowiedzi:

387

Domyślnie topw systemie Linux działa w tak zwanym trybie IRIX, natomiast Menedżer zadań Windows nie. Powiedzmy, że masz 4 rdzenie:

  • Przy włączonym trybie IRIX 1 w pełni wykorzystany rdzeń to 100%, a 4 rdzenie to 400%.

  • Przy wyłączonym trybie IRIX 1 w pełni wykorzystany rdzeń to 25%, a 4 rdzenie to 100%.

Oznacza to, że domyślnie topw Linuksie nieskończona pętla pokaże ~ 100%, a Windows pokaże ją jako ~ 25%, co oznacza dokładnie to samo.

Możesz przełączyć tryb IRIX podczas toppracy za pomocą Shift+ i. To sprawi, że liczby będą się zgadzać.

ten inny facet
źródło
2
Tak - na i7 '4 + 4' (hiperwątkowość) jedna trywialna pętla procesora wychodzi na około 17-18%.
Martin James,
Dlaczego odpowiadający ma jednak 150 UP, a jego wynik to 700 ... czy to TAKI błąd? : - /
uday
5
@uDaY, ponieważ dziennie jest maksymalnie 200 powtórzeń, wszystkie głosy za po tym nie są liczone, zaakceptowane odpowiedzi nadal będą.
sa_ddam213
3
@thatotherguy Kiedy dokładnie nacisnąć shift-I, aby przełączyć? Podczas gdy top jest uruchomiony?
Geek