Давайте начнем с Process → Thread Count для экземпляра _Total . Этот счетчик просто проходит через каждый процесс, получает счетчик потоков и суммирует его. Выполнение этого дает тот же номер, что и эта команда PowerShell:
(gwmi -Query "select threadcount from win32_process" | Select-Object -Property ThreadCount | Measure-Object ThreadCount -Sum).Sum
Это на моем компьютере примерно на 400 меньше, чем счетчик Objects → Threads .
Одна из гипотез расхождения заключается в следующем: в пользовательском режиме каждый поток связан с процессом. Драйверы режима ядра, однако, могут создавать выделенные для устройства потоки, которые никогда не выполняют код пользовательского режима, и, следовательно, может показаться, что они не обнаруживаются при проверке процессов пользовательского режима. Однако, похоже, что системный процесс берет на себя ответственность за потоки драйверов, так что это объяснение, вероятно, неверно.
Более вероятное объяснение состоит в том, что хотя указанная выше команда считает все запущенные потоки, все еще существуют объекты потоков, которые (хотя и прерванные) не были очищены. Поскольку некоторое ведение учета потоков ведется до тех пор, пока все программы не откажутся от своих знаний об этом, живые процессы, удерживающие дескрипторы в мертвых потоках, могут вызвать разницу.
Несколько актуально: внутренняя часть Windows Thread.