Cet article vous présentera les processus et les threads, vous fera comprendre les threads dans Node.js, verra si le nœud est vraiment monothread, les modules child_process et cluster, et expliquera brièvement comment communiquer entre plusieurs threads.
Process
Dans le système d'exploitation, l'explication du processus : Un processus est un processus d'exécution dynamique d'un programme avec certaines fonctions indépendantes sur un ensemble de données. C'est le système d'exploitation qui alloue et planifie les ressources. . Une unité indépendante qui est le support sur lequel l'application s'exécute.
est un processus en cours d'exécution d'une application (concept dynamique)
-
est l'unité de base pour l'allocation du système et la planification des ressources (un processus est généralement composé de trois parties : programme, collecte de données et bloc de contrôle de processus)
Chaque Chaque processus a sa propre adresse d'espace indépendante et sa propre pile de données (les données ne sont pas partagées entre les processus et peuvent être communiquées via d'autres méthodes. Les processus ont généralement cinq états : état initial, état d'exécution, état d'attente, état prêt et). état de terminaison
Thread
Un thread est un processus de contrôle séquentiel unique dans l'exécution d'un programme. Il s'agit de la plus petite unité du flux d'exécution du programme et de l'unité de base de la planification et de la répartition du processeur. "La plus petite unité de planification et d'exécution des tâches" est la plus petite unité de ressources allouée par le système d'exploitation. Un processus unitaire se compose d'un ou plusieurs threads. Les threads sont différentes routes d'exécution de code dans un processus. Les processus sont indépendants les uns des autres, mais l'espace mémoire du programme est partagé entre les threads. dans le même processus. Le changement de contexte de thread est plus rapide que le changement de contexte de processus
Le processus dans - node
node est monothread, c'est-à-dire qu'un processus n'ouvre qu'un seul nœud de thread. [Apprentissage recommandé : "- Tutoriel Nodejs
"]
Est-ce vraiment mono-thread ?
Le nœud est monothread, mais sa couche sous-jacente est multithread. Dans la boucle d'événements, la bibliothèque libuv supprime les tâches de la file d'attente des événements et les affecte à différents threads pour traitement. Désormais, les conditions matérielles ne sont plus aussi arriérées qu'avant. Si un seul thread est utilisé pour le fonctionnement, les ressources seront gaspillées. Par conséquent, afin de réaliser un traitement multi-processus et de tirer pleinement parti des avantages des processeurs multicœurs, Node fournit le module child_process et le module cluster.
Le module child_process est utilisé pour démarrer plusieurs processus enfants, qui exécutent différentes commandes ou exécutent des fichiers de module node.js et des fichiers exécutables
Module cluster, module cluster, utilisé pour implémenter des applications Node.js Ouvrir plusieurs processus enfants dans chaque processus enfant et exécutez une copie de l'application Node.js pour le traitement
child_process module
child_process.spawn() : convient pour renvoyer de grandes quantités de données, telles que le traitement d'images, le traitement des données binaires . child_process.exec() : convient aux petites quantités de données. La valeur par défaut de maxBuffer est 200 * 1024. Le dépassement de cette valeur par défaut entraînera le crash du programme. Si la quantité de données est trop importante, le spawn peut être. utilisé. child_process.execFile() : similaire à child_process.exec(), la différence est qu'il ne peut pas être exécuté via le shell et ne prend pas en charge des comportements tels que la redirection d'E/S et la recherche de fichiers
child_process.fork () : Les nouveaux processus dérivés sont indépendants les uns des autres. Chaque processus a sa propre instance V8 et les ressources système sont limitées. Il n'est pas recommandé de générer trop de processus enfants. Il est généralement défini en fonction du nombre de processeurs système. noyaux.
-
module cluster
cluster.fork([env]) démarre le processus enfant et crée une instance de l'application Node.js dans le processus enfant Les attributs isMaster et isWorker sont utilisés pour déterminer s'il faut s'exécuter dans le processus principal ou dans un sous-processus ? La propriété Workers est utilisée pour obtenir les objets de travail exécutés dans tous les sous-processus. Pour développer, comment plusieurs threads communiquent-ils ? -
Communication inter-processus
Quatre types :
Passage de messages (pipeline, FIFO, file d'attente de messages) Sémaphore (mutex, variable de condition, verrouillage en lecture-écriture) Partage de mémoire ( anonyme, nommé) Appel de procédure à distance
La communication inter-processus ne se rencontre pas seulement dans node, mais aussi dans d'autres langages. Bien sûr, c'est aussi une question incontournable lors de l'entretien. De nombreux contenus peuvent être discutés en profondeur !
Pour plus de connaissances sur la programmation, veuillez visiter :
Introduction à la programmation
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!