Почему " 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 156

1 ответ:

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

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

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

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

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