Почему " while (true)" без "потока.сон" вызывает 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+я. Это позволит сделать цифры совпадают.