Nodejs est-il multithread ?

WBOY
WBOYoriginal
2022-06-29 10:27:463850parcourir

Nodejs n'est pas multithread, mais monothread ; nodejs utilise un mode non bloquant asynchrone monothread. En raison du moteur JavaScript, le nœud est monothread par défaut. peuvent être des méthodes d'E/S asynchrones et pilotées par les événements pour obtenir un environnement d'exécution à thread unique et à haute concurrence.

Nodejs est-il multithread ?

L'environnement d'exploitation de cet article : système Windows 10, nodejs version 12.19.0, ordinateur Dell G3.

Nodejs est-il multithread ?

node est monothread et adopte un mode non bloquant asynchrone monothread.

En raison du moteur JavaScript, le nœud est monothread par défaut et une application node.js ne peut pas utiliser de ressources multicœurs.

Node.js utilise des E/S asynchrones et événementielles pour implémenter un environnement d'exécution à thread unique et à haute concurrence, et le thread unique signifie qu'une seule chose peut être faite en même temps.

nodejs implémente une exécution asynchrone et non bloquante :

nodejs n'a en fait qu'une exécution js monothread, et les E/S sont évidemment d'autres threads.

Le thread d'exécution js est monothread. Il suffit de transmettre les E/S requises à libuv, de revenir immédiatement pour faire autre chose, puis libuv rappelle à l'heure spécifiée.

En détail, nodejs est d'abord appelé depuis le code js dans les liaisons de nœuds vers le code C/C, puis encapsule quelque chose appelé "objet de requête" dans le code C/C et le transmet à libuv. Certains de ces objets de requête sont similaires aux rappels de fonction qui doivent être exécutés. Exécutez simplement le rappel vers libuv et implémentez le rappel une fois l'exécution terminée.

En bref, le processus général des E/S asynchrones est le suivant.

1. Démarrez l'appel d'E/S

L'utilisateur appelle le module principal Node à partir du code Javascript et transmet les paramètres et la fonction de rappel au module principal

Le module principal Node encapsule les paramètres transmis et la fonction de rappel dans la requête. objet.

Poussez cet objet de requête vers le pool de threads d'E/S pour attendre son exécution ;

L'appel asynchrone Javascript se termine et le thread Javascript continue d'effectuer les opérations suivantes.

2. Exécuter le rappel

Une fois l'opération d'E/S terminée, la fonction de rappel précédemment encapsulée dans l'objet de requête sera récupérée et exécutée pour atteindre l'objectif du rappel Javascript. (Les détails du rappel ici sont expliqués ci-dessous)

Comme vous pouvez le voir ici, nous avons en fait toujours mal compris le thread unique de Node.js.

En fait, un seul thread fait référence à un seul thread dans l'environnement d'exécution Javascript. Node.js n'a pas la possibilité de créer de nouveaux threads lors de l'exécution de Javascript. Les opérations finales réelles sont toujours effectuées dans Libuv et sa boucle d'événements. C'est pourquoi Javascript, un langage monothread, peut implémenter des opérations asynchrones dans Node.js. Les deux ne seront pas en conflit.

Connaissances étendues :

Aperçu du multithreading Node.js

Certaines personnes peuvent dire que bien que Node.js soit monothread, il peut utiliser des événements cycliques (Event Loop)l pour implémenter des tâches d'exécution simultanées. En étudiant son essence, NodeJs utilise en fait deux threads différents, l'un est le thread principal pour le traitement des événements de boucle et l'autre est constitué de threads auxiliaires dans le pool de travailleurs. Les principales fonctions et relations de ces deux threads sont telles qu'indiquées dans la figure

Nodejs est-il multithread ?

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!

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