Tout d'abord, regardons l'aspect théorique. Vous devez comprendre ce qu'est un processus conceptuellement pour comprendre la différence entre un processus et un thread et ce qui est partagé entre eux.
Nous avons ce qui suit dans la section 2.2.2 Le Modèle de Thread Classique de Systèmes d'exploitation modernes 3e par Tanenbaum:
Le modèle de processus est basé sur deux concepts indépendants: regroupement des ressources et l'exécution. Parfois, il est utile de les séparer; c'est là que les threads interviennent...
Il continue:
Une façon de voir un processus est que c'est une manière de regrouper des ressources connexes. Un processus a un espace d'adressage contenant un texte de programme et des données, ainsi que d'autres ressources. Ces ressources peuvent inclure des fichiers ouverts, des processus enfants, des alarmes en attente, des gestionnaires de signaux, des informations comptables, et plus encore. En les regroupant sous la forme d'un processus, ils peuvent être gérés plus facilement. L'autre concept qu'un processus a est un fil d’exécution, généralement abrégé en fil. Le fil possède un compteur de programme qui garde trace de l'instruction à exécuter ensuite. Il possède des registres, qui contiennent ses variables de travail actuelles. Il a une pile, qui contient l'historique d'exécution, avec un cadre pour chaque procédure appelée mais pas encore revenue. Bien qu'un fil doive s'exécuter dans un processus, le fil et son processus sont des concepts différents et peuvent être traités séparément. Les processus sont utilisés pour regrouper des ressources; les threads sont les entités planifiées pour l'exécution sur l'UC.
Plus bas, il fournit le tableau suivant:
Objets par processus | Objets par fil
------------------------------|-----------------
Espace d'adressage | Compteur de programme
Variables globales | Registres
Fichiers ouverts | Pile
Processus enfants | État
A...
Maintenant, regardons le côté logiciel. Il existe essentiellement trois façons d'implémenter des threads du côté logiciel.
Les threads dans l'espace utilisateur
Les threads du noyau
Une combinaison des deux
Tout ce dont vous avez besoin pour implémenter des threads est la capacité à sauvegarder l'état du CPU et à maintenir plusieurs piles, ce qui peut souvent être fait dans l'espace utilisateur. L'avantage des threads dans l'espace utilisateur est le changement de thread ultra-rapide car vous n'avez pas à piéger dans le noyau et la capacité de planifier vos threads comme vous le souhaitez. Le plus gros inconvénient est l'incapacité à effectuer des E/S bloquantes (ce qui bloquerait l'ensemble du processus et tous ses threads utilisateur), ce qui est l'une des principales raisons pour lesquelles on utilise des threads en premier lieu. L'utilisation de threads pour les E/S bloquantes simplifie grandement la conception des programmes dans de nombreux cas.
Les threads du noyau ont l'avantage de pouvoir utiliser des E/S bloquantes, en plus de laisser tous les problèmes de planification au système d'exploitation. Mais chaque changement de thread nécessite un piégeage dans le noyau qui est potentiellement relativement lent. Cependant, si vous changez de threads en raison d'une E/S bloquée, ce n'est pas vraiment un problème car l'opération d'E/S vous a probablement déjà piégé dans le noyau de toute façon.
Une autre approche est de combiner les deux, avec plusieurs threads kernel ayant chacun plusieurs threads utilisateur.
Revenons à votre question de terminologie, vous pouvez voir qu'un processus et un fil d'exécution sont deux concepts différents et le choix du terme à utiliser dépend de ce dont vous parlez. En ce qui concerne le terme "processus léger", je ne vois pas vraiment l'intérêt car il ne rend pas aussi bien compte de ce qui se passe que le terme "fil d'exécution".
2 votes
Lié: stackoverflow.com/questions/32294367/…
10 votes
Il est probablement utile de dire que chaque système d'exploitation a une définition différente de ce qu'est un 'thread' ou un 'processus'. Certains systèmes d'exploitation grand public n'ont pas de concept de 'thread', il y a aussi des systèmes d'exploitation embarqués qui n'ont que des 'threads'.
6 votes
TLDR: Les "threads" frères (dans la plupart des systèmes d'exploitation) partagent le même espace d'adressage virtuel, les mêmes sockets et fichiers ouverts, toutes les mêmes ressources. Les "processus," en revanche, sont isolés/protégés les uns des autres et ne partagent rien sauf s'ils demandent explicitement à partager quelque chose de spécifique. Dans un système d'exploitation qui a à la fois des "processus" et des "threads," un processus peut souvent être considéré comme un conteneur pour un ou plusieurs threads et pour toutes les ressources qu'ils partagent.