Чому "while (true)" без "Thread.sleep" викликає 100% використання процесора в Linux, але не в Windows?


158

Я створив просту програму в Java:

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

Якщо я запускаю це на машині Linux, він показує 100% використання процесора, але не призводить до того, що ОС відображається повільно. Однак якщо я запускаю такий самий код у Windows, він показує лише близько 20% використання процесора.

Я використовую Oracle JRE в Windows і OpenJDK 6 в Linux.

Мені цікаво, чи планувальник Windows планує вибирати теми випадковим чином, а Linux - ні?


5
Це залежить від планування завдань операційної системи.
Subhrajyoti Majumder

52
скільки у вас ядер? Звіт менеджера завдань Windows звітує 100%, коли ВСІ ядра зайняті. Чи робить ваш інструмент Linux щось подібне, або він повідомляє 100% за вартість роботи одного ядра, і коли всі ядра зайняті, це 100*N cores %?
yiding

2
У мене є 4 ядра, а в Linux я використовую інструмент системного монітора
Maniek

1
@Quoi Не дуже. Якщо ця програма все працює, то потік працюватиме безперебійно в Windows та Linux.
Девід Геффернан

Відповіді:


387

За замовчуванням topв Linux працює в так званому режимі IRIX, тоді як диспетчер завдань Windows - ні. Скажімо, у вас є 4 ядра:

  • При включеному режимі IRIX 1 повністю використане ядро ​​становить 100%, а 4 ядра - 400%.

  • При вимкненому режимі IRIX 1 повністю використане ядро ​​становить 25%, а 4 ядра - 100%.

Це означає, що за замовчуванням topв Linux буде показано нескінченний цикл як ~ 100%, а Windows покаже його як ~ 25%, і це означає точно те саме.

Ви можете перемикати режим IRIX під час topроботи з Shift+ i. Це дозволить зрівняти числа.


2
Так - на '4 + 4' i7 (гіперперебор) один тривіальний цикл процесора виходить приблизно на 17-18%.
Мартін Джеймс

Чому у відповіді все ж є 150UPs, його оцінка дорівнює 700-х ... це ТАК помилка ?? : - /
uday

5
@uDaY, тому що максимум 200 повторень на день, будь-які зміни після цього не враховуються, прийняті вислови все ще будуть.
sa_ddam213

3
@thatotherguy Коли саме натиснути shift - я переключити? Поки верх працює?
Geek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.