Maison  >  Article  >  Les threads au niveau du noyau s'exécutent plus rapidement

Les threads au niveau du noyau s'exécutent plus rapidement

(*-*)浩
(*-*)浩original
2019-12-25 14:47:233699parcourir

Les threads au niveau du noyau s'exécutent plus rapidement

Thread au niveau du noyau : La commutation est contrôlée par le noyau Lorsque le thread bascule, il est converti du mode utilisateur au mode noyau. Après le changement, vous devez revenir au mode utilisateur à partir du mode noyau ; vous pouvez faire bon usage de smp, c'est-à-dire utiliser un processeur multicœur. Voici à quoi ressemblent les threads Windows. (Apprentissage recommandé : phpstorm)

La commutation du noyau de thread au niveau utilisateur est contrôlée par le programme en mode utilisateur lui-même, sans intervention du noyau, et la consommation d'entrée et de sortie de l'état du noyau est réduit, mais ce n'est pas très bon. Utilisant un processeur multicœur, c'est généralement ainsi que Linux pthread est actuellement utilisé.

L'implémentation des threads peut être divisée en deux catégories : Thread au niveau utilisateur et thread au niveau du noyau, ce dernier est également appelé thread pris en charge par le noyau ou processus léger. Dans les systèmes d'exploitation multithread, les méthodes d'implémentation de chaque système sont différentes. Dans certains systèmes, des threads au niveau de l'utilisateur sont implémentés et dans d'autres, des threads au niveau du noyau sont implémentés.

Thread utilisateur fait référence à un thread implémenté dans un programme utilisateur sans support du noyau. Il ne dépend pas du cœur du système d'exploitation. Le processus d'application utilise la bibliothèque de threads pour assurer la création, la synchronisation, fonction de planification et de gestion des threads pour contrôler les threads utilisateur.

Aucun changement de mode utilisateur/mode noyau n'est requis, c'est rapide et le noyau du système d'exploitation ne connaît pas l'existence de multi-threads, donc bloquer un thread bloquera l'ensemble du processus (y compris tous ses threads) . Étant donné que l'allocation des tranches de temps du processeur est ici basée sur le processus, le temps d'exécution de chaque thread est relativement réduit.

Threads du noyau : Créés et détruits par le noyau du système d'exploitation. Le noyau conserve les informations de contexte de processus et de thread ainsi que la commutation de thread. Si un thread du noyau est bloqué en raison d'opérations d'E/S, cela n'affectera pas le fonctionnement des autres threads. Windows NT et 2000/XP prennent en charge les threads du noyau.

Les threads utilisateur s'exécutent sur un système intermédiaire. Il existe actuellement deux manières d'implémenter des systèmes intermédiaires, à savoir le système d'exécution et le thread de contrôle du noyau.

Le « système d'exécution » est essentiellement un ensemble de fonctions utilisées pour gérer et contrôler les threads, y compris les fonctions de création, d'annulation, de synchronisation des threads et de communication, ainsi que les fonctions de planification. Ces fonctions résident dans l'espace utilisateur et servent d'interface entre les threads utilisateur et le noyau.

Les threads utilisateur ne peuvent pas utiliser d'appels système. Au lieu de cela, lorsque le thread a besoin de ressources système, il envoie la requête au runtime, et ce dernier obtient les ressources système via les appels système correspondants.

Fil de contrôle du noyau : le système alloue plusieurs processus légers (LWP) au processus. LWP peut obtenir les services fournis par le noyau via des appels système, et les threads utilisateur du processus peuvent être associés à LWP via le multiplexage. quant à obtenir les services du noyau.

Voici les différences entre les threads au niveau de l'utilisateur et les threads au niveau du noyau :

(1) Les threads pris en charge par le noyau prennent en charge le noyau du système d'exploitation, tandis que les threads au niveau de l'utilisateur les threads sont conscients du noyau du système d’exploitation. Insensible.

(2) La création, l'annulation et la planification des threads au niveau de l'utilisateur ne nécessitent pas la prise en charge du noyau du système d'exploitation et sont gérées au niveau du langage (tel que Java) tandis que la création, l'annulation et la planification de ; les threads pris en charge par le noyau nécessitent La prise en charge est fournie par le noyau du système d'exploitation et est en grande partie la même que la création, la destruction et la planification des processus.

(3) Lorsqu'un thread de niveau utilisateur exécute une instruction d'appel système, cela entraînera l'interruption du processus auquel il appartient, tandis que lorsqu'un thread de support du noyau exécute une instruction d'appel système, cela provoquera uniquement le fil à interrompre.

(4) Dans un système avec uniquement des threads au niveau utilisateur, la planification du processeur est toujours basée sur le processus. Plusieurs threads dans un processus en cours d'exécution sont contrôlés par le programme utilisateur pour s'exécuter en rotation s'il existe un support du noyau. Dans un système de threads, la planification du processeur est basée sur les threads et le planificateur de threads du système d'exploitation est responsable de la planification des threads.

(5) L'entité programme des threads au niveau utilisateur est un programme exécuté en mode utilisateur, tandis que l'entité programme des threads pris en charge par le noyau est un programme qui peut s'exécuter dans n'importe quel état.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn