Почему занятый цикл занимает 100% процессора?


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

5 ответов

Решение

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

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

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

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

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

"Цикл занятости" не должен взаимодействовать с памятью, поэтому центральный процессор выполняет всю работу сам, не дожидаясь внешнего ввода.

Другие вопросы по тегам