Vamos começar com Processo → Contagem de segmentos para a instância _Total . Esse contador apenas passa por todos os processos, obtém sua contagem de threads e totaliza isso. Fazer isso dá o mesmo número que este comando do PowerShell:
(gwmi -Query "select threadcount from win32_process" | Select-Object -Property ThreadCount | Measure-Object ThreadCount -Sum).Sum
Esse total, na minha máquina, é cerca de 400 menor que o contador Objetos → Threads .
Uma hipótese para a discrepância é a seguinte: no modo de usuário, cada thread é associado a um processo. No entanto, os drivers no modo kernel podem criar tópicos dedicados ao dispositivo , que nunca executam código de modo de usuário e, portanto, parece que eles não são selecionados por uma inspeção dos processos de modo de usuário. No entanto, parece que o processo do Sistema assume a responsabilidade pelos tópicos dos drivers, portanto esta explicação provavelmente não está correta.
Uma explicação mais provável é que, embora o comando acima conte todos os encadeamentos em execução, ainda há objetos de encadeamento que (embora encerrados) não foram limpos. Como alguma contabilidade de thread é mantida até que todos os programas sejam liberados seu conhecimento sobre isso , processos vivos que seguram alças para fios mortos podem causar a diferença.
Um pouco relevante: Internals of Windows Thread .