Étant donné que le nœud a des caractéristiques "pilotées par les transactions" et "E/S" asynchrones, il s'agit d'une opération asynchrone non bloquante ; pour chaque requête simultanée, le serveur enregistre un événement de déclenchement pour la requête et donne une fonction de rappel pour exécuter l'événement. traitement en séquence.Une fois le traitement terminé, la fonction de rappel est exécutée, puis le traitement d'événement suivant est exécuté, afin que le nœud puisse atteindre une concurrence élevée.
L'environnement d'exploitation de ce tutoriel : système windows10, nodejs version 12.19.0, ordinateur Dell G3.
nodejs est une opération asynchrone non bloquante. Pour chaque requête simultanée, le serveur enregistre un événement de déclenchement (E/S) pour la requête et donne une fonction de rappel (ce processus ne bloque pas les nouvelles requêtes de connexion). Exécutez le traitement d'événement (E/S) en séquence, exécutez la fonction de rappel une fois le traitement terminé, puis exécutez le traitement d'événement (E/S) suivant.
Avant d'expliquer pourquoi le nœud peut atteindre une simultanéité élevée, vous pourriez aussi bien comprendre plusieurs autres fonctionnalités du nœud :
Mono-thread
Clarifions d'abord un concept, à savoir : le nœud est mono-thread, ce qui est cohérent avec JavaScript a les mêmes caractéristiques dans les navigateurs et le thread principal JavaScript ne peut pas partager son état avec d'autres threads (tels que les threads d'E/S) dans le nœud.
L'avantage du thread unique est :
Il n'est pas nécessaire de prêter attention au problème de synchronisation d'état entre les threads comme le multi-threading
Il n'y a pas de surcharge causée par le changement de thread
Il n'y a pas blocage
Bien sûr, le monothreading présente également de nombreux inconvénients :
Impossible d'utiliser pleinement le processeur multicœur
Un grand nombre de calculs occupant le processeur entraînera le blocage de l'application (c'est-à-dire qu'il ne convient pas pour gourmand en CPU)
Les erreurs entraîneront la fermeture de l'ensemble de l'application
E/S asynchrones
Vous vous demandez peut-être, puisque le nœud est à thread unique et que tous les événements sont traités sur un seul thread, cela ne devrait pas Cela ne serait-il pas très inefficace et contraire à une concurrence élevée ?
Au contraire, les performances du nœud sont très élevées. L'une des raisons est que le nœud dispose d'une fonctionnalité d'E/S asynchrone. Chaque fois qu'une demande d'E/S se produit, le nœud fournit un thread d'E/S pour la demande. Ensuite, le nœud ne se souciera pas du processus d'opération d'E/S, mais continuera à exécuter l'événement sur le thread principal. Il ne doit être traité que lorsque la requête renvoie le rappel. C'est-à-dire que le nœud permet de gagner beaucoup de temps en attendant les requêtes.
C'est également l'une des raisons importantes pour lesquelles le nœud prend en charge une concurrence élevée
En fait, non seulement les opérations d'E/S, la plupart des opérations du nœud sont effectuées de cette manière asynchrone. C'est comme un organisateur : il n'a pas besoin de tout faire personnellement, il doit seulement dire aux membres comment fonctionner correctement, accepter les commentaires et gérer les étapes clés, afin que toute l'équipe puisse fonctionner efficacement.
Transaction-driven
Vous voudrez peut-être demander à nouveau : comment le nœud sait-il que la demande a renvoyé un rappel, et quand doit-il gérer ces rappels ?
La réponse est une autre fonctionnalité de node : pilotée par les transactions, c'est-à-dire que le thread principal exécute le programme à travers la boucle d'événements. C'est une autre raison importante pour laquelle node prend en charge une concurrence élevée.
Étude recommandée : "
nodejs. tutoriel vidéoCe 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!