Qu’est-ce que le threading en termes de programmation ?


Un thread est un processus léger.

Un processus est une séquence de code en cours d'exécution, ainsi que toutes les structures de données de soutien (carte mémoire, ressources ouvertes, pile, etc).


Si vous voulez avoir du code qui s'exécute en parallèle (soit parce que cela facilite la programmation, soit parce que vous voulez profiter des architectures multi-CPU), vous pouvez soit exécuter plusieurs processus, soit plusieurs threads dans un processus.

Un processus peut contenir un ou plusieurs threads, et tous les threads d'un même processus partagent la carte mémoire, les ressources ouvertes, mais ont leurs propres piles.

Il y a des avantages et des inconvénients à chaque approche. Par exemple, l'utilisation de processus vous permet d'exécuter en même temps des programmes indépendants qui peuvent ne pas avoir été spécifiquement écrits pour fonctionner les uns avec les autres. L'utilisation de processus vous donne également une meilleure protection contre les interférences involontaires entre les tâches (qui peuvent être malveillantes ou simplement des erreurs de programmation) - c'est pourquoi Chrome utilise un processus par onglet par exemple, au lieu de threads. C'est aussi pourquoi Chrome occupe généralement beaucoup plus de mémoire que Firefox, si vous ouvrez un grand nombre d'onglets.

D'un autre côté, l'utilisation de threads permet d'économiser de la mémoire, puisque tant de choses peuvent être partagées entre les threads. Ils facilitent également la programmation, car différents threads d'un même processus peuvent communiquer en utilisant simplement des variables partagées (avec une synchronisation appropriée).

Il existe même des programmes qui vous permettent de choisir entre processus et threads - un exemple qui me vient à l'esprit est le serveur web open source Apache.

Par défaut, Apache spawn un nouveau processus par connexion client, et chaque processus ne sert qu'un seul client. Cependant, vous pouvez le configurer pour qu'il utilise plutôt des threads. L'utilisation des threads lui permet de s'exécuter plus rapidement et d'utiliser moins de mémoire dans des scénarios très chargés, mais potentiellement au détriment de la sécurité (s'il y a un bogue dans Apache et qu'un attaquant le trouve, il peut être en mesure d'accéder aux données des autres threads&apos ;).