Я наблюдаю процент загрузки моего процессора процессом. Как процесс использует только 50% процессора? Разве процесс не использует 100%, затем 0%, а затем 100%? Это не как любая другая инструкция, это другая программа.
7 ответов
Это только итоги опросов примерно один раз в секунду. Вы смотрите, сколько из последней секунды он использовал.
Если вы видите, что процессор некоторое время находится на уровне 50%, вероятно, он использует 100% одного процессора в системе с двумя процессорами.
Технически вы правы. В любой момент времени ЦП либо используется, либо не используется. Но отображать это на графике было бы не очень полезно, поэтому график усредняет загрузку процессора в течение некоторого периода времени, возможно, каждую секунду.
ОС планирует процесс на определенный период времени. Таким образом, если процесс запланирован на (скажем) 1 мс из 10 мс, то он будет использовать 10% ЦП.
Это немного нелогично, поскольку (в однопоточной однопроцессорной системе) процесс либо запущен, либо не запущен. то есть он использует 100% или 0%. Процент, который вы видите, измеряется по временному окну и является мерой ОС, выделяющей временные интервалы вашему процессу для запуска.
Обратите внимание, что ваш процесс не будет способствовать этому, если вы обращаетесь к I/O. Поэтому, если вы делаете огромный расчет, вы зарегистрируетесь на 100% (при условии, что больше ничего не выполняется). Если вы затем дождетесь доступа к сетевому пакету / диску и т.д., Ваш ЦП снизится, несмотря на то, что ваш процесс все еще работает.
На очень низком уровне вы в основном правы. В любой данный момент процессор выполняет инструкцию для данного процесса или нет.
Но ваша ОС находится между вашими процессами и процессором, заставляя их делить время. Процент, который вы видите, представляет собой процент недавнего времени обработки, которое ОС предоставила этому процессу.
Это основано на среднем времени. Несмотря на то, что все потоки могут иметь одинаковую частоту процессорного времени (в зависимости от приоритета), потоки могут просто сказать «спасибо, но я бездействую» и передать свою очередь следующему потоку. Вот почему программы не всегда используют один и тот же% времени, а большинство программ потребляют 0% ЦП, а программы, которые действительно нуждаются в ЦП, могут занять около 100% времени для себя.
Почему он ограничен 50%? У вас, вероятно, два ядра процессора, и оно использует только одно.
Или, как предполагается, он использует гиперпоточность, но я не знаю, как именно он себя ведет.
Ваша программа может выполнять много операций ввода-вывода (чтение или запись на диск или в сеть). Это будет держать программу занятой, но не потребует много времени процессора.
Использование системы выбирается и усредняется, что является единственно разумным решением.
Например, запись того, сколько времени процесс / поток провел в течение 1 секунды. Если он потратил 1 секунду на ЦП, это 100% ЦП (или 50%, если у вас 2 ЦП и т.д.), Если он потратил 100 мс, это 10% загрузки ЦП.