Question Quelle est la différence entre un processus et un thread?


Quelle est la différence technique entre un processus et un thread?

J'ai l'impression qu'un mot comme «processus» est surexploité et qu'il y a aussi du fil matériel et logiciel. Que diriez-vous des processus légers dans des langues comme Erlang? Y a-t-il une raison définitive d'utiliser un terme plutôt qu'un autre?


1225
2017-10-14 09:13


origine


Réponses:


Les processus et les threads sont des séquences d'exécution indépendantes. La différence typique est que les threads (du même processus) s'exécutent dans un espace mémoire partagé, tandis que les processus s'exécutent dans des espaces mémoire séparés.

Je ne suis pas sûr de ce que "threads hardware" vs "logiciel" vous pourriez faire référence. Les threads sont une fonctionnalité d'environnement d'exploitation, plutôt qu'une fonctionnalité de CPU (bien que le processeur ait généralement des opérations qui rendent les threads efficaces).

Erlang utilise le terme «processus» car il n'expose pas un modèle de multiprogrammation à mémoire partagée. Les appeler "threads" impliquerait qu'ils ont de la mémoire partagée.


1111
2017-10-14 09:15



Processus
Chaque processus fournit les ressources nécessaires pour exécuter un programme. Un processus possède un espace d'adressage virtuel, un code exécutable, des poignées ouvertes vers des objets système, un contexte de sécurité, un identificateur de processus unique, des variables d'environnement, une classe de priorité, des tailles minimales et maximales. Chaque processus est démarré avec un seul thread, souvent appelé thread principal, mais peut créer des threads supplémentaires à partir de n'importe lequel de ses threads.

Fil
Un thread est une entité dans un processus qui peut être programmée pour l'exécution. Tous les threads d'un processus partagent son espace d'adressage virtuel et ses ressources système. En outre, chaque thread gère des gestionnaires d'exceptions, une priorité d'ordonnancement, un stockage local de thread, un identifiant de thread unique et un ensemble de structures que le système utilisera pour enregistrer le contexte de threads jusqu'à ce qu'il soit planifié. Le contexte de thread inclut l'ensemble de registres de la machine du thread, la pile de noyau, un bloc d'environnement de thread et une pile utilisateur dans l'espace d'adressage du processus du thread. Les threads peuvent également avoir leur propre contexte de sécurité, qui peut être utilisé pour usurper l'identité des clients.


Trouvé ceci sur MSDN ici:
A propos des processus et des threads 

Microsoft Windows prend en charge le multitâche préemptif, ce qui crée l'effet de l'exécution simultanée de plusieurs threads à partir de plusieurs processus. Sur un ordinateur multiprocesseur, le système peut exécuter simultanément autant de threads qu'il y a de processeurs sur l'ordinateur.


634
2017-10-14 09:43



Processus:

  • Une instance d'exécution d'un programme est appelée un processus.
  • Certains systèmes d'exploitation utilisent le terme «tâche» pour désigner un programme en cours d'exécution.
  • Un processus est toujours stocké dans la mémoire principale appelée aussi mémoire primaire ou mémoire vive.
  • Par conséquent, un processus est appelé en tant qu'entité active. Il disparaît si la machine est redémarrée.
  • Plusieurs processus peuvent être associés à un même programme.
  • Sur un système multiprocesseur, plusieurs processus peuvent être exécutés en parallèle.
  • Sur un système monoprocesseur, bien que le vrai parallélisme ne soit pas atteint, un algorithme d'ordonnancement de processus est appliqué et le processeur est programmé pour exécuter chaque processus un par un donnant une illusion de concurrence.
  • Exemple: Exécution de plusieurs instances du programme "Calculatrice". Chacune des instances est appelée comme un processus.

Fil:

  • Un thread est un sous-ensemble du processus.
  • Il est appelé "processus léger", car il est similaire à un processus réel mais s'exécute dans le contexte d'un processus et partage les mêmes ressources allouées au processus par le noyau.
  • Habituellement, un processus n'a qu'un seul fil de contrôle - un ensemble d'instructions machine s'exécutant à la fois.
  • Un processus peut également être composé de plusieurs threads d'exécution qui exécutent des instructions simultanément.
  • Plusieurs threads de contrôle peuvent exploiter le vrai parallélisme possible sur les systèmes multiprocesseurs.
  • Sur un système monoprocesseur, un algorithme de planification de thread est appliqué et le processeur est programmé pour exécuter chaque thread un à la fois.
  • Tous les threads qui s'exécutent dans un processus partagent le même espace d'adressage, les mêmes descripteurs de fichier, la même pile et d'autres attributs liés aux processus.
  • Étant donné que les threads d'un processus partagent la même mémoire, la synchronisation de l'accès aux données partagées dans le processus gagne une importance sans précédent.

J'ai emprunté les informations ci-dessus de la Quête de connaissance! Blog.


218
2018-03-19 14:17



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 de la section 2.2.2 Le modèle du fil classique dans Systèmes d'exploitation modernes 3e par Tanenbaum:

Le modèle de processus est basé sur deux concepts indépendants:   regroupement et exécution. Parfois, il est utile de les séparer;   C'est ici que les fils entrent en jeu ....

Il continue:

Une façon de voir un processus est que c'est un moyen de   regrouper les ressources connexes. Un processus a un espace d'adressage   contenant le texte et les données du programme, ainsi que d'autres ressources. Celles-ci   la ressource peut inclure des fichiers ouverts, des processus enfants, des alarmes en attente,   gestionnaires de signaux, informations de comptabilité, et plus encore. En les mettant   ensemble sous la forme d'un processus, ils peuvent être gérés plus facilement.   L'autre concept d'un processus est un fil d'exécution, généralement   raccourci à juste fil. Le thread a un compteur de programme qui maintient   piste de l'instruction à exécuter ensuite. Il a des registres, qui   tenir ses variables de travail actuelles. Il a une pile, qui contient le   l'historique d'exécution, avec une trame pour chaque procédure appelée mais pas   encore revenu de. Bien qu'un thread doit exécuter dans certains processus, le   thread et son processus sont des concepts différents et peuvent être traités   séparément. Les processus sont utilisés pour regrouper les ressources; discussions   sont les entités prévues pour l'exécution sur la CPU.

Plus bas, il fournit le tableau suivant:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Traitons le multithreading matériel problème. Classiquement, un processeur prend en charge un seul thread d'exécution, en conservant l'état du thread via un seul compteur de programme et un ensemble de registres. Mais que se passe-t-il s'il manque un cache? Il faut beaucoup de temps pour extraire les données de la mémoire principale, et pendant ce temps, le processeur reste immobile. Donc, quelqu'un a eu l'idée d'avoir deux ensembles d'état de threads (registres PC +) afin qu'un autre thread (peut-être dans le même processus, peut-être dans un processus différent) puisse travailler pendant que l'autre thread attendait la mémoire principale. Il existe plusieurs noms et implémentations de ce concept, tels que HyperThreading et Multithreading simultané (SMT pour faire court).

Maintenant, regardons le côté logiciel. Il y a fondamentalement trois façons dont les threads peuvent être implémentés du côté logiciel.

  1. Threads de l'espace utilisateur
  2. Fils du noyau
  3. Une combinaison des deux

Tout ce dont vous avez besoin pour implémenter des threads est la possibilité de sauvegarder l'état du CPU et de maintenir plusieurs piles, ce qui peut souvent être fait dans l'espace utilisateur. L'avantage des threads d'espace utilisateur est une commutation de threads super rapide car vous n'avez pas besoin de piéger dans le noyau et de programmer vos threads comme vous le souhaitez. Le plus grand inconvénient est l'impossibilité de bloquer les E / S (ce qui bloquerait l'ensemble du processus et tous les threads utilisateur), ce qui est l'une des principales raisons pour lesquelles nous utilisons des threads en premier lieu. Le blocage des E / S à l'aide de threads simplifie considérablement la conception du programme dans de nombreux cas.

Les threads du noyau ont l'avantage de pouvoir utiliser les E / S bloquantes, en plus de laisser tous les problèmes de planification au système d'exploitation. Mais chaque interrupteur de fil nécessite un piégeage dans le noyau qui est potentiellement relativement lent. Cependant, si vous changez de threads à cause d'E / S bloquées, cela ne pose pas vraiment de problème car l'opération d'E / S vous a probablement déjà piégé dans le noyau.

Une autre approche consiste à combiner les deux, avec plusieurs threads de noyau ayant chacun plusieurs threads utilisateur.

Pour en revenir à votre question de terminologie, vous pouvez voir qu'un processus et un fil d'exécution sont deux concepts différents et que le choix du terme à utiliser dépend de ce dont vous parlez. En ce qui concerne le terme «processus de poids léger», je n'y vois pas personnellement le sens, car il ne traduit pas vraiment ce qui se passe, pas plus que le terme «fil d'exécution».


90
2017-10-22 12:42



Pour expliquer plus en ce qui concerne la programmation concurrente

  1. Un processus a un environnement d'exécution autonome. Un processus a généralement un ensemble privé complet de ressources d'exécution de base; en particulier, chaque processus a son propre espace mémoire.

  2. Les threads existent dans un processus - chaque processus en a au moins un. Les threads partagent les ressources du processus, y compris la mémoire et les fichiers ouverts. Cela rend la communication efficace mais potentiellement problématique.

Garder la personne moyenne à l'esprit,

Sur votre ordinateur, ouvrez Microsoft Word et le navigateur Web. Nous appelons ces deux processus.

Dans Microsoft Word, vous tapez quelque chose et il est automatiquement enregistré. Maintenant, vous auriez remarqué que l'édition et la sauvegarde se font en parallèle - l'édition sur un thread et l'enregistrement sur l'autre thread.


57
2017-12-24 07:04



Une application consiste en un ou plusieurs processus. Un processus, dans les termes les plus simples, est un programme d'exécution. Un ou plusieurs threads s'exécutent dans le contexte du processus. Un thread est l'unité de base à laquelle le système d'exploitation alloue l'heure du processeur. Un thread peut exécuter n'importe quelle partie du code de processus, y compris les parties en cours d'exécution par un autre thread. Une fibre est une unité d'exécution qui doit être planifiée manuellement par l'application. Les fibres s'exécutent dans le contexte des threads qui les ordonnent.

Volé à ici.


40
2017-10-14 09:16



Un processus est une collection de code, de mémoire, de données et d'autres ressources. Un thread est une séquence de code exécutée dans le cadre du processus. Vous pouvez (généralement) avoir plusieurs threads s'exécutant simultanément dans le même processus.


22
2017-10-14 09:30



  • Chaque processus est un thread (thread primaire).
  • Mais chaque fil n'est pas un processus. C'est une partie (entité) d'un processus.

21
2017-08-09 20:28



Un processus est une instance d'exécution d'une application. Qu'est-ce que ça veut dire? Eh bien, par exemple, lorsque vous double-cliquez sur l'icône Microsoft Word, vous démarrez un processus qui exécute Word. Un thread est un chemin d'exécution dans un processus. En outre, un processus peut contenir plusieurs threads. Lorsque vous démarrez Word, le système d'exploitation crée un processus et commence à exécuter le thread principal de ce processus.

Il est important de noter qu'un thread peut faire tout ce qu'un processus peut faire. Mais comme un processus peut comporter plusieurs threads, un thread peut être considéré comme un processus «léger». Ainsi, la différence essentielle entre un fil et un processus est le travail que chacun est utilisé pour accomplir. Les threads sont utilisés pour de petites tâches, tandis que les processus sont utilisés pour des tâches plus lourdes - essentiellement l'exécution d'applications.

Une autre différence entre un thread et un processus est que les threads dans le même processus partagent le même espace d'adressage, contrairement aux autres processus. Cela permet aux threads de lire et d'écrire dans les mêmes structures de données et variables, et facilite également la communication entre threads. La communication entre les processus - également appelée IPC, ou communication inter-processus - est assez difficile et nécessite beaucoup de ressources.


17
2018-03-14 05:09



Exemple réel pour Process and Thread Cela vous donnera l'idée de base sur le fil et le processus enter image description here

J'ai emprunté les informations ci-dessus à la réponse de Scott Langham - Merci


14
2017-12-06 23:24



Processus: 

  1. Le processus est un processus lourd.
  2. Processus est un programme distinct qui a séparé la mémoire, les données, les ressources ect.
  3. Les processus sont créés à l'aide de la méthode fork ().
  4. Le changement de contexte entre les processus prend du temps.

Exemple:
Dites, en ouvrant n'importe quel navigateur (mozilla, Chrome, IE). À ce stade, le nouveau processus commencera à s'exécuter.

Threads:

  1. Les threads sont des processus légers. Les threads sont regroupés dans le processus.
  2. Les threads ont une mémoire partagée, des données, des ressources, des fichiers, etc.
  3. Les threads sont créés à l'aide de la méthode clone ().
  4. Le changement de contexte entre les threads ne prend pas beaucoup de temps en tant que processus.

Exemple:
Ouverture de plusieurs onglets dans le navigateur


14
2018-05-10 08:43