Почему занятый цикл занимает 100% процессорного времени? - PullRequest
3 голосов
/ 01 мая 2011


Почему занятый цикл часто использует 100% времени процессора, в то время как циклы, которые реализуют сложные алгоритмы, будут использовать намного меньше?
спасибо :)

Ответы [ 5 ]

4 голосов
/ 01 мая 2011

Инструкции JUMP в архитектуре ЦП неэффективны, потому что они вызывают сброс конвейераЗанятый цикл фактически представляет собой бесконечный ряд инструкций JUMP.

3 голосов
/ 01 мая 2011

Сложный алгоритм, безусловно, может использовать 100% процессора.Тем не менее, многие циклы, которые реализуют сложные алгоритмы, либо явно выдают поток периодически, и / или имеют некоторый код, который вызывает в ОС в какой-то момент, где либо поток получен, либо что-то, что требует ожидания (например, вызов копроцессор).

2 голосов
/ 01 мая 2011

Во-первых, если ваш занятый цикл использует 100%, значит, вы делаете это неправильно. Спи немного.

Во-вторых, сложные алгоритмы часто используют память для хранения значений, а не просто циклы. Каждый раз, когда поток должен использовать внешний ресурс, такой как память, диск и т. Д., Процессор должен немного подождать. Вот почему вы увидите, что он использует менее 100%.

1 голос
/ 01 мая 2011

Зависит от того, что делает этот «сложный алгоритм».Есть ли доступ к жесткому диску?Сетевые запросы?Взаимодействовать с любым другим оборудованием?Когда это происходит, процессору придется ждать, пока эти вещи завершатся, поэтому он бездействует, ничего не делая (или переключает контекст на какую-то другую работу), ожидая возвращения этой информации.

1 голос
/ 01 мая 2011

«Занятому шлейфу» не нужно общаться с памятью, поэтому процессор в основном выполняет всю работу сам, не ожидая внешнего ввода.

...