почему бесконечный цикл непреднамеренного типа увеличивает использование процессора? - PullRequest
10 голосов
/ 17 мая 2010

Я знаю, что бесконечный цикл непреднамеренного вида обычно вызывает высокую загрузку ЦП. Но я не совсем понимаю, почему. Кто-нибудь может мне это объяснить?

Ответы [ 4 ]

19 голосов
/ 17 мая 2010

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

6 голосов
/ 17 мая 2010

Бесконечные циклы сами по себе не являются проблемой вообще. Большинство приложений, которые взаимодействуют с пользователем, представляют собой бесконечные циклы. Они многократно ждут пользователя, воздействуют на него и снова выполняют цикл. Сама операционная система представляет собой бесконечный цикл. Такие бесконечные циклы называются «производительными», потому что, несмотря на бесконечное повторение чего-либо, они периодически выводят что-то полезное для пользователя.

Полагаю, ваше беспокойство связано с непроизводительными бесконечными циклами. Но понятно, почему это проблема. У них есть все недостатки производительных циклов (потребление энергии, использование процессорного времени и т. Д.) Без каких-либо преимуществ, т.е. они не производят ничего полезного.

6 голосов
/ 17 мая 2010

Бесконечные циклы ничем не отличаются от любого другого выполняющегося кода. Компьютер не знает, что бесконечный цикл не является сложным вычислением, которое просто требует много итераций.

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

0 голосов
/ 17 мая 2010

Вы, вероятно, ссылаетесь на инструкцию Останов и воспламенение

...