Почему «в то время как истина» будет использовать 100% ресурсов процессора? - PullRequest
0 голосов
/ 08 февраля 2019

Я запустил следующий код Java на сервере Linux:

while (true) {
   int a = 1+2;
}

Это привело к тому, что одно ядро ​​процессора достигло 100% использования.Я запутался в этом, потому что я узнал, что процессоры справляются с задачами путем разделения времени, то есть процессор будет выполнять одну задачу в одном временном интервале (планировщик диапазона времени процессора).Если имеется 10 временных интервалов, то в то время как истинная задача должна максимально использовать 10% загрузки ЦП, поскольку остальные 90% будут назначены другим задачам.Так почему же это 100%?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

В многозадачной ОС время ЦП делится между потоками выполнения (процессами, потоками) - это правда.Итак, что здесь происходит - цикл выполняется до некоторой точки, когда происходит прерывание тактовой частоты, которое используется ОС для планирования следующего «фрагмента» выполнения из другого процесса или потока.Но как только ваш код не достигает определенных точек (ввод / вывод или другие системные вызовы, которые могут переключить процесс в состояние «ожидания», например, ожидание операций синхронизации объектов сна и т. Д.), Процесс продолжает оставаться в«рабочее» состояние, которое указывает планировщику держать его в очереди выполнения и перепланировать его выполнение при первой же возможности.Если есть некоторые «конкурентные» процессы, которые сохраняют свое «рабочее» состояние в течение длительного периода времени, а также использование ЦП будет распределено между вами и всеми этими процессами, в противном случае выполнение вашего процесса будет перенесено немедленно, что в любом случае приведет к постоянному высокому потреблению ЦП.,

0 голосов
/ 08 февраля 2019

Если загрузка вашего ЦП не на 100%, то процесс может использовать столько, сколько ему нужно (до 100%), пока другие процессы не запросят использование ресурса. планировщик процессов пытается максимально увеличить использование ЦП и никогда не оставлять процесс без процессорного времени, если нет других процессов, которые в нем нуждаются.

Так что ваш цикл while будет использовать 100%свободных ресурсов ЦП и будет использовать меньше только при запуске других процессов, интенсивно использующих ЦП.(если вы используете Linux / Unix, вы можете наблюдать это с помощью top, запустив цикл while, затем запустив другой процесс с интенсивным использованием ЦП и наблюдая падение% ЦП для процесса с циклом).

...