Lexique/Processeur, GPU et énergie

Threads

Aussi : nombre de threads

En bref

Un thread est un fil d’exécution distinct à l’intérieur d’un processus, et un processus peut faire tourner plusieurs threads en même temps sur différents cœurs du processeur. La colonne Threads du Moniteur d’activité indique combien de threads chaque processus a en ce moment.

La plupart des apps utilisent beaucoup de threads : un pour dessiner l’interface et gérer les clics, d’autres pour les requêtes réseau, l’accès aux fichiers et le travail en arrière-plan. Quelques dizaines de threads, c’est normal pour une grosse app.

Le nombre de threads en dit peu sur l’activité d’une app. La plupart des threads passent leur temps à attendre. Le % processeur mesure mieux le travail réel.

Où voir le nombre de threads

Dans le Moniteur d’activité, cliquez sur l’onglet Processeur. La colonne Threads indique le nombre par processus, et le bas de la fenêtre affiche le nombre total de threads et de processus sur le Mac.

Dans le Terminal, ps -M -p <PID> liste les threads d’un seul processus.

Quand un nombre de threads qui grandit doit vous alerter

Un nombre de threads qui ne cesse de monter pendant des heures, sans jamais se stabiliser, peut trahir un bug : l’app lance des threads et ne les termine jamais. Si cette app grossit aussi en mémoire ou ralentit, la relancer est une bonne première étape, et le signaler au développeur l’aide à corriger.

Pourquoi certaines apps ont des centaines de threads

macOS fournit aux apps une réserve partagée de threads de travail grâce à Grand Central Dispatch. Quand une app délègue beaucoup de petites tâches, comme décoder des images ou lire des fichiers, la réserve peut grandir pour les traiter, puis rétrécir plus tard. Cela seul peut ajouter des dizaines de threads à une app occupée.

Les navigateurs, les apps de messagerie et les éditeurs de code font souvent tourner plusieurs processus, chacun avec ses propres threads pour l’affichage, le réseau, l’audio et les scripts. Les apps audio et vidéo gardent des threads prêts pour que la lecture n’ait jamais à attendre. Additionnez le tout, et quelques centaines de threads dans une grosse app n’ont rien d’inhabituel.

kernel_task affiche souvent le plus grand nombre de tous. Il regroupe les threads qu’utilisent le noyau de macOS et ses pilotes, et ce n’est pas le signe d’un problème.

Comment vérifier le nombre de threads d’une app

  1. Dans le Moniteur d’activité, sélectionnez le processus et double-cliquez dessus, ou cliquez sur le bouton Inspecter dans la barre d’outils.
  2. La fenêtre de l’inspecteur indique Threads, ainsi que Ports et Changements de contexte, pour ce processus.
  3. Dans le Terminal, lancez top -l 1 -pid <PID> -stats pid,command,th, en remplaçant <PID> par l’identifiant de la colonne PID. La valeur #TH affiche le total des threads, puis les threads en cours après la barre oblique.
  4. Pour trier tous les processus par nombre de threads, lancez top -o th -stats pid,command,th et appuyez sur q pour quitter.

Nombre de threads : normal ou inquiétant

Le total compte moins que la direction qu’il prend dans le temps.

  • Normal : le nombre bondit quand vous ouvrez des fenêtres, lancez un téléchargement ou commencez un export, puis redescend une fois le travail fini.
  • Normal : un nombre élevé mais stable, qui reste à peu près le même pendant des heures.
  • Inquiétant : un nombre qui grimpe toute la journée et ne redescend jamais, même quand l’app est au repos.
  • Inquiétant : un nombre de threads qui grimpe en même temps que la mémoire ou le nombre de ports. Cette combinaison signale généralement une fuite dans l’app.
  • Inquiétant : beaucoup de threads en cours, affichés après la barre oblique dans top, dans une app que vous n’utilisez pas. Elle fait un travail que vous ne lui avez pas demandé.

Threads et cœurs du processeur

Avoir plus de threads que de cœurs est normal. macOS fait passer les cœurs d’un thread à l’autre de nombreuses fois par seconde, et la plupart des threads attendent de toute façon. Seuls les threads en cours se disputent un cœur.

Le nombre de threads qui peuvent tourner au même instant est égal à votre nombre de cœurs logiques, donné par sysctl -n hw.logicalcpu. Si davantage de threads sont prêts, les autres attendent, et c’est cette attente qui fait monter la charge moyenne.

Questions fréquentes

Que signifie Threads dans le Moniteur d’activité ?

C’est le nombre de threads qu’exécute un processus. Les threads permettent à une app de faire plusieurs choses à la fois, comme dessiner sa fenêtre pendant qu’elle télécharge un fichier.

Un nombre élevé de threads est-il mauvais ?

En général, non. Les grosses apps ont souvent des dizaines ou des centaines de threads, et la plupart sont inactifs. C’est un nombre qui grandit sans s’arrêter qu’il faut surveiller.

Quel est le lien entre les threads et un % processeur au-delà de 100 ?

Un processus ne peut utiliser plus d’un cœur que s’il a plusieurs threads qui travaillent en même temps. C’est ainsi que le % processeur dépasse 100 %.

Combien de threads un Mac peut-il exécuter à la fois ?

Un par cœur logique au même instant. Lancez sysctl -n hw.logicalcpu pour voir ce nombre. Des milliers d’autres peuvent exister, mais ils se relaient.

Quitter une app libère-t-il ses threads ?

Oui. Quand un processus se termine, tous ses threads se terminent avec lui. Relancer une app est le moyen le plus rapide de remettre à zéro un nombre de threads devenu trop grand.

Pourquoi kernel_task a-t-il autant de threads ?

kernel_task est le noyau de macOS, et ses threads incluent ceux qu’utilisent le noyau et ses pilotes. Un grand nombre y est normal.

Voir aussi

Vous cherchez mieux que le Moniteur d’activité ? Consultez les meilleures alternatives au Moniteur d’activité pour Mac, ou parcourez tous les termes du lexique.