Mengapa "while (true)" tanpa "Thread.sleep" menyebabkan penggunaan CPU 100% di Linux tetapi tidak di Windows?

158

Saya telah membuat program sederhana di java:

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

Jika saya menjalankan ini pada mesin Linux, ini menunjukkan penggunaan CPU 100%, tetapi tidak menyebabkan OS tampak lambat. Namun, jika saya menjalankan kode yang sama persis pada Windows, itu hanya menunjukkan penggunaan CPU sekitar 20%.

Saya menggunakan Oracle JRE di Windows dan OpenJDK 6 di Linux.

Saya bertanya-tanya apakah penjadwal Windows mendahului utas secara acak dan Linux tidak?

Maniek
sumber
5
Ini tergantung pada Penjadwalan Tugas Sistem Operasi.
Subhrajyoti Majumder
52
berapa core yang kamu punya? Manajer tugas Windows melaporkan 100% ketika SEMUA core sedang sibuk. Apakah alat linux Anda melakukan sesuatu yang serupa, atau apakah melaporkan 100% untuk pekerjaan 1 core, dan ketika semua core sibuk, itu 100*N cores %?
Menyembunyikan
2
Saya memiliki 4 core dan di linux saya menggunakan alat monitor sistem
Maniek
1
@ Quoi Tidak juga. Jika semua program itu berjalan, maka utas akan berjalan tanpa gangguan pada Windows dan Linux.
David Heffernan

Jawaban:

387

Secara default, toppada Linux berjalan dalam apa yang disebut mode IRIX, sedangkan Windows Task Manager tidak. Katakanlah Anda memiliki 4 core:

  • Dengan mode IRIX aktif, 1 core yang sepenuhnya digunakan adalah 100% dan 4 core 400%.

  • Dengan mode IRIX mati, 1 inti yang sepenuhnya digunakan adalah 25% dan 4 core 100%.

Ini berarti bahwa secara default, topdi Linux akan menunjukkan loop tanpa batas sebagai ~ 100% dan Windows akan menampilkan ~ 25%, dan itu berarti hal yang persis sama.

Anda dapat mengaktifkan mode IRIX saat topsedang berjalan dengan Shift+ i. Ini akan membuat angka cocok.

pria lain itu
sumber
2
Yup - pada '4 + 4' i7, (hyperthreading), satu loop CPU sepele sekitar 17-18%.
Martin James
Mengapa penjawab memiliki 150UP masih nilainya 700-an ... apakah itu SO bug ?? : - /
uday
5
@ uDaY, karena ada maks 200 rep sehari, setiap upvote setelah itu tidak dihitung, diterima masih akan tetap.
sa_ddam213
3
@thatotherguy Kapan tepatnya menekan shift-I untuk beralih? Saat top sedang berjalan?
Geek