Почему "while (true)" без "Thread.sleep" приводит к 100% использованию ЦП в Linux, но не в Windows?
Я создал простую программу в java:
public static void main(String[] args) throws InterruptedException {
while (true)
;
}
Если я запустил это на машине Linux, он показывает 100% использование ЦП, но не приводит к медленной работе ОС. Однако, если я запускаю тот же самый код в Windows, он показывает только около 20% использования ЦП.
Я использую Oracle JRE для Windows и OpenJDK 6 для Linux.
Мне интересно, будет ли планировщик Windows предварительно вытеснять потоки случайно, а Linux - нет?
Ответы
Ответ 1
По умолчанию top
в Linux работает в так называемом режиме IRIX, в то время как диспетчер задач Windows этого не делает. Скажем, у вас 4 ядра:
-
В режиме IRIX 1 полностью используемое ядро составляет 100%, а 4 ядра - 400%.
-
При выключенном режиме IRIX 1 полностью используемое ядро составляет 25%, а 4 ядра - 100%.
Это означает, что по умолчанию top
в Linux будет показывать бесконечный цикл как ~ 100%, а Windows покажет его как ~ 25%, и это означает точно то же самое.
Вы можете переключать режим IRIX, пока top
работает с Shift + i. Это приведет к совпадению чисел.