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

156
nl ja de
@Quoi Не совсем. Если эта программа работает, то поток будет работать без прерывания работы как в Windows, так и в Linux.
добавлено автор David Heffernan, источник
Это зависит от планирования задач операционной системы.
добавлено автор Subhrajyoti Majumder, источник
сколько ядер у вас есть? Диспетчер задач Windows сообщает 100%, когда все ядра заняты. Ваш линукс-инструмент делает что-то похожее, или он сообщает 100% для работы 1 ядра, а когда все ядра заняты, это 100 * N ядер% ?
добавлено автор yiding, источник
У меня 4 ядра, а на linux я использую инструмент системного монитора
добавлено автор Maniek, источник

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 . Это приведет к совпадению чисел.

386
добавлено
@thatotherguy Когда нужно нажать shift-I для переключения? Пока верх работает?
добавлено автор Geek, источник
@uDaY, потому что максимум 200 повторений в день, любые upvotes после этого не учитываются, принятые анвееры все равно будут.
добавлено автор sa_ddam213, источник
Yup - на «4 + 4» i7 (гиперпоточность) один тривиальный цикл процессора выходит примерно на 17-18%.
добавлено автор Martin James, источник
+1 очень хороший ответ.
добавлено автор Peter Lawrey, источник
Почему у ответчика, хотя есть 150UP, все еще его оценка составляет 700 ... это ТАК ошибка? : - /
добавлено автор uday, источник
+1 проблема решена. Спасибо :)
добавлено автор Maniek, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru