Maison > Article > interface Web > node.js est-il monothread ?
node.js est monothread par défaut. En raison du moteur JavaScript, node.js adopte un mode non bloquant asynchrone monothread. Cependant, les bibliothèques tierces peuvent fournir du multi-thread. -prise en charge du threading. C'est juste que le thread principal est monothread et que les opérations dans le thread principal sont bloquées de manière synchrone.
L'environnement d'exploitation de ce tutoriel : système windows10, nodejs version 12.19.0, ordinateur Dell G3.
node.js est monothread par défaut et node.js adopte un mode non bloquant asynchrone monothread.
node.js adopte un mode non bloquant asynchrone monothread. Son thread unique fait référence au thread unique de son propre environnement d'exécution Javascript. Node.js n'a pas la possibilité de créer de nouveaux threads lorsque Javascript est exécuté via Libuv et sa boucle d'événements.
Node signifie simplement que le thread principal est monothread et que les opérations dans le thread principal sont bloquées de manière synchrone. Mais il envoie toutes les opérations asynchrones au pool de threads IO, et le thread principal interagit avec le pool de threads IO via un certain mécanisme d'interrogation d'événements pour obtenir des données asynchrones.
Les performances de node.js ne sont pas les plus élevées. En raison du moteur JavaScript, node.js est monothread par défaut et une application node.js ne peut pas utiliser de ressources multicœurs.
Cependant, il existe des bibliothèques tierces qui fournissent un support multithread, mais ce n'est pas transparent. Node.js résout les goulots d'étranglement d'E/S (par rapport à la technologie traditionnelle, les appels de blocage synchrones gaspillent les threads). Il n'améliore pas la vitesse d'E/S, mais la planification des ressources est plus efficace. Si la vitesse d'E/S n'est pas résolue, node.js peut seulement dire qu'il peut gérer plusieurs requêtes en même temps, mais le temps de réponse de chaque requête est toujours aussi long, voire plus.
Le nœud est monothread, alors comment gère-t-il un nombre élevé de requêtes simultanées ?
Fiez-vous à l'événementiel.
Chaque processus Node.js n'a qu'un seul thread principal exécutant le code du programme, formant une pile de contexte d'exécution.
En plus du fil de discussion principal, une "file d'attente des événements" est également maintenue. Lorsque la demande réseau de l'utilisateur ou une autre opération asynchrone arrive, le nœud la placera dans la file d'attente des événements. À ce moment, elle ne sera pas exécutée immédiatement et le code ne sera pas bloqué jusqu'à ce que le code du thread principal soit exécuté. complet.
Une fois l'exécution du code du thread principal terminée, puis via la boucle d'événements, c'est-à-dire le mécanisme de boucle d'événements, commencez à récupérer le premier événement depuis le début de la file d'attente d'événements, allouez un thread du pool de threads à exécutez cet événement, puis continuez à récupérer le troisième événement. Pour le deuxième événement, un thread est alloué à partir du pool de threads à exécuter, puis le troisième et le quatrième. Le thread principal vérifie en permanence s'il y a des événements non exécutés dans la file d'attente des événements jusqu'à ce que tous les événements de la file d'attente des événements aient été exécutés. Après cela, chaque fois qu'un nouvel événement est ajouté à la file d'attente des événements, le thread principal sera informé de les supprimer. commandez-les et remettez-les à EventLoop pour traitement. Lorsqu'un événement est exécuté, le thread principal sera averti, le thread principal exécutera le rappel et le thread sera renvoyé au pool de threads.
Le fil principal ne cesse de répéter la troisième étape ci-dessus.
Le thread unique de NodeJ n'est qu'un thread principal. Les opérations essentiellement asynchrones sont effectuées par le pool de threads. Node transmet toutes les opérations de blocage au pool de threads interne pour la mise en œuvre. Il est uniquement responsable de la planification aller-retour continue et n'en effectue aucune. Opérations d'E/S réelles, réalisant ainsi des E/S asynchrones non bloquantes, c'est l'essence même du nœud unique et piloté par les événements.
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!