Threads
Também: número de threads
Resposta rápida
Uma thread é uma linha de execução separada dentro de um processo, e um processo pode rodar várias threads ao mesmo tempo em núcleos diferentes da CPU. A coluna Threads do Monitor de Atividade mostra quantas threads cada processo tem no momento.
A maioria dos apps usa muitas threads: uma para desenhar a interface e tratar os cliques, e outras para as solicitações de rede, o acesso a arquivos e o trabalho em segundo plano. Algumas dezenas de threads é normal para um app grande.
O número de threads diz pouco sobre o quanto um app está ocupado. A maioria das threads passa o tempo esperando. A % CPU mede melhor o trabalho de verdade.
Onde ver o número de threads
No Monitor de Atividade, clique na aba CPU. A coluna Threads mostra o número por processo, e a parte de baixo da janela mostra o total de threads e de processos no Mac.
No Terminal, ps -M -p <PID> lista as threads de um único processo.
Quando um número crescente de threads importa
Um número de threads que não para de subir ao longo de horas, sem se estabilizar, pode indicar um bug em que um app abre threads e nunca as encerra. Se esse app também cresce na memória ou fica lento, reiniciá-lo é um primeiro passo razoável, e avisar o desenvolvedor ajuda.
Por que alguns apps têm centenas de threads
O macOS oferece aos apps um conjunto compartilhado de threads de trabalho pelo Grand Central Dispatch. Quando um app distribui muitas tarefas pequenas, como decodificar imagens ou ler arquivos, o conjunto pode crescer para dar conta e depois encolher de novo. Só isso já pode acrescentar dezenas de threads a um app ocupado.
Navegadores, apps de chat e editores de código muitas vezes rodam vários processos, cada um com as suas threads para desenho, rede, áudio e scripts. Apps de áudio e vídeo mantêm threads prontas para que a reprodução nunca precise esperar. Somando tudo, algumas centenas de threads em um app grande não é algo incomum.
O kernel_task muitas vezes mostra o maior número de todos. Ele guarda as threads que o kernel do macOS e os drivers usam, e isso não é sinal de problema.
Como ver o número de threads de um app
- No Monitor de Atividade, selecione o processo e clique duas vezes nele, ou clique no botão Informações na barra de ferramentas.
- A janela do inspetor lista Threads, junto com Portas e Trocas de Contexto, para aquele processo.
- No Terminal, execute
top -l 1 -pid <PID> -stats pid,command,th, trocando <PID> pelo ID do processo da coluna PID. O valor #TH mostra o total de threads e, depois da barra, as threads rodando. - Para ordenar todos os processos pelo número de threads, execute
top -o th -stats pid,command,the pressione q para sair.
Números de threads normais e preocupantes
O total importa menos que a direção em que ele se move com o tempo.
- Normal: o número salta quando você abre janelas, começa um download ou inicia uma exportação, e depois cai quando o trabalho termina.
- Normal: um número alto e estável, que fica mais ou menos igual por horas.
- Preocupante: um número que sobe o dia todo e nunca cai, mesmo com o app ocioso.
- Preocupante: um número de threads subindo junto com a memória ou com o número de Portas. Essa combinação em geral aponta para um vazamento no app.
- Preocupante: muitas threads rodando, mostradas depois da barra em
top, em um app que você não está usando. Ele está fazendo um trabalho que você não pediu.
Threads e núcleos de CPU
Ter mais threads que núcleos é normal. O macOS alterna os núcleos entre as threads muitas vezes por segundo, e a maioria das threads está esperando de qualquer forma. Só as threads rodando disputam um núcleo.
O número de threads que podem rodar no mesmo instante é igual ao número de núcleos lógicos que o sysctl -n hw.logicalcpu mostra. Se houver mais threads prontas do que isso, as que sobram esperam, e é essa espera que aumenta a média de carga.
Perguntas frequentes
O que significa Threads no Monitor de Atividade?
É o número de threads que um processo está rodando. As threads permitem que um app faça várias coisas ao mesmo tempo, como desenhar a janela enquanto baixa um arquivo.
Um número alto de threads é ruim?
Em geral, não. Apps grandes costumam ter dezenas ou centenas de threads, e a maioria está ociosa. O padrão a observar é um número que cresce sem parar.
Qual a relação entre as threads e a % CPU acima de 100?
Um processo só consegue usar mais de um núcleo quando tem mais de uma thread trabalhando ao mesmo tempo. É assim que a % CPU passa de 100%.
Quantas threads um Mac consegue rodar ao mesmo tempo?
Uma por núcleo lógico no mesmo instante. Execute sysctl -n hw.logicalcpu para ver o número. Milhares de outras podem existir, mas elas se revezam.
Encerrar um app libera as threads dele?
Sim. Quando um processo termina, todas as threads dele terminam junto. Reiniciar um app é o jeito mais rápido de zerar um número de threads que cresceu demais.
Por que o kernel_task tem tantas threads?
O kernel_task é o kernel do macOS, e as threads dele incluem as usadas pelo kernel e pelos drivers. Um número grande ali é normal.
Relacionados
Procurando algo melhor que o Monitor de Atividade? Veja as melhores alternativas ao Monitor de Atividade para Mac ou navegue por todos os termos do glossário.