1

Два счетчика в мониторе производительности - это "Потоки" в разделе "Объекты" и "Количество потоков" в разделе "Процесс".

На машинах, на которые я смотрел, есть большая разница между значениями для двух счетчиков, причем Objects> Threads намного больше. На что указывает разница между этими двумя значениями?

1 ответ1

2

Давайте начнем с ProcessThread Count для экземпляра _Total . Этот счетчик просто проходит через каждый процесс, получает счетчик потоков и суммирует его. Выполнение этого дает тот же номер, что и эта команда PowerShell:

(gwmi -Query "select threadcount from win32_process" | Select-Object -Property ThreadCount | Measure-Object ThreadCount -Sum).Sum

Это на моем компьютере примерно на 400 меньше, чем счетчик ObjectsThreads .

Одна из гипотез расхождения заключается в следующем: в пользовательском режиме каждый поток связан с процессом. Драйверы режима ядра, однако, могут создавать выделенные для устройства потоки, которые никогда не выполняют код пользовательского режима, и, следовательно, может показаться, что они не обнаруживаются при проверке процессов пользовательского режима. Однако, похоже, что системный процесс берет на себя ответственность за потоки драйверов, так что это объяснение, вероятно, неверно.

Более вероятное объяснение состоит в том, что хотя указанная выше команда считает все запущенные потоки, все еще существуют объекты потоков, которые (хотя и прерванные) не были очищены. Поскольку некоторое ведение учета потоков ведется до тех пор, пока все программы не откажутся от своих знаний об этом, живые процессы, удерживающие дескрипторы в мертвых потоках, могут вызвать разницу.

Несколько актуально: внутренняя часть Windows Thread.

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