Le nœud s'exécute dans un seul thread, en utilisant un mode non bloquant asynchrone à un seul thread ; mais à proprement parler, il y a plusieurs threads dans le nœud. Le thread unique signifie qu'il n'y a qu'un seul moteur js dans le nœud exécuté sur le nœud principal. Le thread et d'autres opérations asynchrones sont également disponibles. Il existe des threads indépendants pour l'exécution et le nœud est monothread par défaut. Un "node.js" ne peut pas utiliser de ressources multicœurs.
L'environnement d'exploitation de ce tutoriel : système windows10, nodejs version 12.19.0, ordinateur Dell G3.
Le nœud s'exécute dans un seul thread, en utilisant le mode non bloquant asynchrone à un seul thread.
Quand il s'agit de nœud, nous pouvons immédiatement penser à des mots tels que monothread, IO asynchrone et piloté par les événements. La première chose à clarifier est de savoir si le nœud est vraiment monothread. S'il est monothread, alors où les E/S asynchrones et les événements planifiés (setTimeout, setInterval, etc.) sont-ils exécutés.
En fait, à proprement parler, le nœud n'est pas mono-thread. Il existe de nombreux types de threads dans le nœud, notamment :
thread d'exécution du moteur js
thread timer (setTimeout, setInterval)
thread http asynchrone (ajax)
Ce que nous appelons habituellement un seul thread signifie qu'il n'y en a qu'un seul dans le nœud js s'exécute sur le thread principal. D'autres threads d'E/S asynchrones et liés aux événements utilisent libuv pour implémenter des pools de threads internes et la planification des threads. Il existe une boucle d'événement dans libv, et le passage à travers la boucle d'événement peut obtenir un effet similaire au multithreading. En termes simples, Event Loop maintient une pile d'exécution et une file d'attente d'événements si des fonctions d'E/S et de minuterie asynchrones sont trouvées dans la pile d'exécution actuelle, ces fonctions de rappel asynchrones seront placées dans la file d'attente d'événements. Une fois l'exécution de la pile d'exécution actuelle terminée, les fonctions de rappel asynchrones de la file d'attente des événements sont exécutées dans un certain ordre à partir de la file d'attente des événements.
Dans la figure ci-dessus, de la pile d'exécution à la file d'attente des événements, et enfin la fonction de rappel est exécutée dans un certain ordre dans la file d'attente des événements, l'ensemble du processus est une version simplifiée d'Event Loop. De plus, lorsque la fonction de rappel est exécutée, une pile d'exécution sera également générée. Des fonctions asynchrones peuvent être imbriquées dans la fonction de rappel, ce qui signifie que la pile d'exécution est imbriquée.
En d'autres termes, le thread unique dans le nœud signifie que le moteur js ne s'exécute que sur le seul thread principal. D'autres opérations asynchrones sont également exécutées par des threads indépendants. La commutation de contexte similaire au multithreading est implémentée via la boucle d'événement et le thread de libv. planification de la piscine. Les threads sont les plus petits processus, donc le nœud est également un processus unique. Cela explique pourquoi le nœud est monothread et monoprocessus.
Apprentissage recommandé : "Tutoriel vidéo Nodejs"
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!