Processus vs thread : les différences expliquées
Un processus est un programme en cours d'exécution doté de son propre espace d'adressage privé et de ses ressources. Un thread est une unité d'exécution à l'intérieur d'un processus. Tous les threads d'un processus partagent sa mémoire, ce qui les rend peu coûteux à créer et rapides pour communiquer, mais signifie aussi qu'un bug ou un plantage peut affecter tout le processus. Des processus distincts sont isolés les uns des autres, ce qui est plus sûr mais coûte plus cher à créer et à faire communiquer.
| Critère | Processus | Thread |
|---|---|---|
| Définition | Un programme en cours d'exécution avec son propre espace d'adressage, ses fichiers et ses autres ressources | Un fil d'exécution à l'intérieur d'un processus, avec sa propre pile et ses propres registres |
| Mémoire | Espace d'adressage virtuel distinct, isolé des autres processus | Partage le code, le tas et les données globales de son processus ; seule la pile est privée |
| Coût de création | Plus lourd : un nouvel espace d'adressage doit être mis en place (le copy-on-write réduit ce coût) | Plus léger : pas de nouvel espace d'adressage |
| Changement de contexte | Plus coûteux : l'espace d'adressage change, et les traductions en cache (TLB) peuvent être perdues | Moins coûteux : l'espace d'adressage et les caches restent les mêmes |
| Communication | Nécessite une communication interprocessus comme les pipes, les sockets ou la mémoire partagée | Lit et écrit directement la mémoire partagée, ce qui est rapide |
| Isolation et défaillances | Un plantage reste généralement confiné au processus | Un plantage dans un thread peut faire tomber tout le processus |
| Synchronisation | Nécessaire lorsque des processus partagent de la mémoire ou des fichiers | Toujours nécessaire pour les données partagées : mutex et opérations atomiques, sinon le programme subit des data races et des interblocages |
| Ordonnancement | Contient un ou plusieurs threads | L'unité que le système d'exploitation ordonnance réellement sur les cœurs du CPU |
| Usages typiques | Isolation et sécurité : onglets de navigateur, services, pipelines du shell | Travail parallèle au sein d'un programme : serveurs gérant de nombreuses connexions, tâches d'arrière-plan, calcul parallèle |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.