Qual é a diferença entre 'Objetos - Threads' e 'Process - Thread Count' no Performance Monitor?

1

Dois contadores no monitor de desempenho são "Threads" em "Objetos" e "Thread Count" em "Processo".

Nas máquinas que eu observei, há uma grande diferença entre os valores dos dois contadores, com Objetos > Tópicos muito maiores. O que a diferença entre os dois valores indica?

    
por Ben Aaronson 10.05.2016 / 15:15

1 resposta

2

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 .

    
por 10.05.2016 / 16:37