À propos des processus et des threads

Chaque processus fournit les ressources nécessaires à l’exécution d’un programme. Un processus a un espace d’adressage virtuel, du code exécutable, des handles ouverts pour les 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 de jeu de travail et au moins un thread d’exécution. Chaque processus est démarré avec un thread unique, souvent appelé thread principal, mais peut créer des threads supplémentaires à partir de l’un de ses threads.

Un thread est l’entité au sein d’un processus qui peut être planifiée pour l’exécution. Tous les threads d’un processus partagent son espace d’adressage virtuel et les ressources système. En outre, chaque thread conserve des gestionnaires d’exceptions, une priorité de planification, un stockage local de thread, un identificateur de thread unique et un ensemble de structures que le système utilisera pour enregistrer le contexte de thread jusqu’à ce qu’il soit planifié. Le contexte du thread inclut l’ensemble des registres d’ordinateur du thread, la pile du 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 emprunter l’identité des clients.

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.

Un objet de travail permet de gérer des groupes de processus en tant qu’unité. Les objets de travail sont des objets namables, sécurisables et partageables qui contrôlent les attributs des processus qui leur sont associés. Les opérations effectuées sur l’objet de travail affectent tous les processus associés à l’objet de travail.

Une application peut utiliser le pool de threads pour réduire le nombre de threads d’application et assurer la gestion des threads de travail. Les applications peuvent mettre en file d’attente des éléments de travail, associer le travail à des handles d’attente, mettre automatiquement en file d’attente en fonction d’un minuteur et établir une liaison avec des E/S.

La planification en mode utilisateur (UMS) est un mécanisme léger que les applications peuvent utiliser pour planifier leurs propres threads. Une application peut basculer entre des threads UMS en mode utilisateur sans impliquer le planificateur système et reprendre le contrôle du processeur si un thread UMS se bloque dans le noyau. Chaque thread UMS a son propre contexte de thread au lieu de partager le contexte de thread d’un seul thread. La possibilité de basculer entre les threads en mode utilisateur rend UMS plus efficace que les pools de threads pour les éléments de travail de courte durée qui nécessitent peu d’appels système.

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 planifient. Chaque thread peut planifier plusieurs fibres. En général, les fibres n’offrent pas d’avantages par rapport à une application multithread bien conçue. Toutefois, l’utilisation de fibres peut faciliter le portage d’applications conçues pour planifier leurs propres threads.

Pour plus d'informations, voir les rubriques suivantes :