10

Я наблюдаю процент загрузки моего процессора процессом. Как процесс использует только 50% процессора? Разве процесс не использует 100%, затем 0%, а затем 100%? Это не как любая другая инструкция, это другая программа.

7 ответов7

15

Это только итоги опросов примерно один раз в секунду. Вы смотрите, сколько из последней секунды он использовал.

Если вы видите, что процессор некоторое время находится на уровне 50%, вероятно, он использует 100% одного процессора в системе с двумя процессорами.

11

Технически вы правы. В любой момент времени ЦП либо используется, либо не используется. Но отображать это на графике было бы не очень полезно, поэтому график усредняет загрузку процессора в течение некоторого периода времени, возможно, каждую секунду.

3

ОС планирует процесс на определенный период времени. Таким образом, если процесс запланирован на (скажем) 1 мс из 10 мс, то он будет использовать 10% ЦП.

Это немного нелогично, поскольку (в однопоточной однопроцессорной системе) процесс либо запущен, либо не запущен. то есть он использует 100% или 0%. Процент, который вы видите, измеряется по временному окну и является мерой ОС, выделяющей временные интервалы вашему процессу для запуска.

Обратите внимание, что ваш процесс не будет способствовать этому, если вы обращаетесь к I/O. Поэтому, если вы делаете огромный расчет, вы зарегистрируетесь на 100% (при условии, что больше ничего не выполняется). Если вы затем дождетесь доступа к сетевому пакету / диску и т.д., Ваш ЦП снизится, несмотря на то, что ваш процесс все еще работает.

2

На очень низком уровне вы в основном правы. В любой данный момент процессор выполняет инструкцию для данного процесса или нет.

Но ваша ОС находится между вашими процессами и процессором, заставляя их делить время. Процент, который вы видите, представляет собой процент недавнего времени обработки, которое ОС предоставила этому процессу.

1

Это основано на среднем времени. Несмотря на то, что все потоки могут иметь одинаковую частоту процессорного времени (в зависимости от приоритета), потоки могут просто сказать «спасибо, но я бездействую» и передать свою очередь следующему потоку. Вот почему программы не всегда используют один и тот же% времени, а большинство программ потребляют 0% ЦП, а программы, которые действительно нуждаются в ЦП, могут занять около 100% времени для себя.

Почему он ограничен 50%? У вас, вероятно, два ядра процессора, и оно использует только одно.

Или, как предполагается, он использует гиперпоточность, но я не знаю, как именно он себя ведет.

0

Ваша программа может выполнять много операций ввода-вывода (чтение или запись на диск или в сеть). Это будет держать программу занятой, но не потребует много времени процессора.

0

Использование системы выбирается и усредняется, что является единственно разумным решением.

Например, запись того, сколько времени процесс / поток провел в течение 1 секунды. Если он потратил 1 секунду на ЦП, это 100% ЦП (или 50%, если у вас 2 ЦП и т.д.), Если он потратил 100 мс, это 10% загрузки ЦП.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .