Почему занятый цикл занимает 100% процессора?
Почему занятый цикл часто использует 100% времени процессора, в то время как циклы, которые реализуют сложные алгоритмы, будут использовать намного меньше?
Спасибо:)
5 ответов
Сложный алгоритм, безусловно, может использовать 100% процессора. Тем не менее, многие циклы, которые реализуют сложные алгоритмы, либо явно выдают поток периодически, и / или имеют некоторый код, который вызывает в ОС в какой-то момент, где либо поток получен, либо что-то, что требует ожидания (например, вызов кооперирования). процессор) бывает.
Инструкции JUMP в архитектуре ЦП неэффективны, потому что они вызывают сброс конвейера. Занятый цикл фактически представляет собой бесконечный ряд инструкций JUMP.
Во-первых, если ваш занятый цикл использует 100%, значит, вы делаете это неправильно. Спи немного.
Во-вторых, сложные алгоритмы часто используют память для хранения значений, а не просто циклы. Каждый раз, когда потоку нужно использовать внешний ресурс, такой как память, диск и т. Д., Процессор должен немного подождать. Вот почему вы увидите, что он использует менее 100%.
Зависит от того, что делает этот "сложный алгоритм". Есть ли доступ к жесткому диску? Сетевые запросы? Взаимодействовать с любым другим оборудованием? Когда это происходит, процессору придется ждать, пока эти вещи завершатся, поэтому он бездействует, ничего не делая (или переключает контекст на какую-то другую работу), в то время как он ожидает возвращения этой информации.
"Цикл занятости" не должен взаимодействовать с памятью, поэтому центральный процессор выполняет всю работу сам, не дожидаясь внешнего ввода.