Процесс простоя обычно не выполняет никакой полезной работы, кроме как выполнить инструкцию HLT
, которая переводит ядро ЦП в состояние пониженного энергопотребления ( C1 ). Однако тот факт, что ваш эталонный тест не потребляет 100% процессорного времени, открывает возможность для предположений о том, что происходит.
Если ваше приложение однопоточное, а ваша тестовая система - многоядерная / гиперпоточная / многопроцессорная, то вы должны ожидать около 50% времени простоя ЦП для двух ядер, 75% для четырех и т. Д. Это связано с тем, что Проценты времени процессора в диспетчере задач включают все ядра. (Я считаю, что в старых версиях Windows была возможность изменить это, но я не вижу этого в Vista.)
Если процесс в режиме ожидания потребляет много ресурсов ЦП, это может указывать на то, что ваше приложение тратит много времени на сон. Это может быть ожидание данных от некоторого внешнего источника (например, диска или сети). Это может занять много времени в ожидании объектов синхронизации (например, мьютексов или событий). Также может потребоваться много времени для вызова функции Sleep()
. Профилирование вашего кода должно определить, где он проводит время.
Для получения полностью воспроизводимых результатов тестов может потребоваться отключить фоновые приложения и службы с интенсивным использованием процессора / диска / сети (например, индексирование поиска, инвентаризация программного обеспечения SMS, сканирование на вирусы, загрузка из Центра обновления Windows, IncrediBuild / distcc) или подключить компьютер к изолированная сеть (или вообще без сети).
Я предполагаю, что вы написали эталонный тест для своего приложения и пытаетесь использовать диспетчер задач, чтобы диагностировать, почему результаты эталонного теста не соответствуют вашим ожиданиям. Диспетчер задач не является точным способом измерения производительности приложения.