Почему «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 - нет?

Maniek
источник
5
Это зависит от планирования задач операционной системы.
Subhrajyoti Majumder
52
сколько ядер у вас есть? Диспетчер задач Windows сообщает 100%, когда ВСЕ ядра заняты. Ваш Linux-инструмент делает что-то похожее, или он сообщает о 100% стоимости работы 1 ядра, и когда все ядра заняты, это так 100*N cores %?
Yiding
2
У меня 4 ядра, и в Linux я использую инструмент системного монитора
Maniek
1
@Quoi Не совсем. Если эта программа - все, что выполняется, поток будет работать без перерывов как в Windows, так и в Linux.
Дэвид Хеффернан

Ответы:

387

По умолчанию topв Linux работает в так называемом режиме IRIX, а Windows Task Manager - нет. Допустим, у вас есть 4 ядра:

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

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

Это означает, что по умолчанию topв Linux бесконечный цикл будет отображаться как ~ 100%, а в Windows - около 25%, и это означает точно то же самое.

Вы можете переключать режим IRIX, когда topработает с Shift+ i. Это сделает цифры совпадают.

тот другой парень
источник
2
Да - на i4 «4 + 4» (гиперпоточность) один тривиальный цикл ЦП выходит примерно на 17-18%.
Мартин Джеймс
Почему у ответчика, хотя у него 150 UPs, все равно его счет - 700 ... это ТАК баг ?? : - /
Uday
5
@uDaY, так как есть максимум 200 повторений в день, любые ответные реакции после этого не учитываются, принятые ответы все еще будут.
sa_ddam213
3
@thatotherguy Когда именно нажать Shift-I, чтобы переключиться? Пока топ работает?
Компьютерщик