Maison >interface Web >js tutoriel >Sur quoi est basé le mécanisme asynchrone du nœud ?
Le mécanisme asynchrone du nœud est basé sur des « événements ». Toutes les requêtes d'E/S, de communication réseau et de base de données sont exécutées de manière non bloquante et les résultats renvoyés sont traités par la boucle d'événements. Le nœud ne traitera qu'un seul événement à la fois et entrera immédiatement dans la boucle d'événements pour vérifier les événements suivants une fois terminé. De cette manière, le processeur et la mémoire peuvent se concentrer sur le traitement d'une seule chose en même temps, tout en essayant de permettre l'exécution en parallèle d'E/S et d'autres opérations fastidieuses.
L'environnement d'exploitation de ce tutoriel : système Windows 7, nodejs version 16, ordinateur DELL G3.
NodeJS est monothread. Le monothreading présente les avantages suivants :
Simple
Hautes performances, évitant les frais généraux liés aux changements fréquents de thread
Il consomme moins de ressources car il est unique. -threadé et sous forte charge Dans ce cas, l'utilisation de la mémoire est toujours très faible
Thread-safe, il n'y a aucun problème tel que le verrouillage, le déverrouillage et le blocage
Comment résoudre une concurrence élevée ?
node utilise des E/S asynchrones et pilotées par les événements (fonction de rappel) pour résoudre le problème de la concurrence élevée.
De manière générale, les solutions à haute concurrence fourniront un modèle multithread, fournissant un thread pour chaque logique métier et compensant le temps nécessaire aux appels d'E/S synchrones via la commutation de thread système. Comme Apache, il y a un thread par requête.
NodeJS utilise un modèle monothread et utilise des méthodes de requête asynchrones pour toutes les E/S afin d'éviter des changements de contexte fréquents. Il maintient une file d'attente d'événements lorsque NodeJS est exécuté, lorsque le programme est exécuté, il entre dans la boucle d'événements et attend le résultat ; la suivante. Lorsqu'un événement arrive, chaque demande d'E/S asynchrone sera poussée vers la file d'attente des événements pour attendre son exécution.
Le mécanisme asynchrone de NodeJS est basé sur des événements. Toutes les requêtes d'E/S, de communication réseau et de base de données sont exécutées de manière non bloquante et les résultats renvoyés sont traités par la boucle d'événements. Comme le montre l'image :
Le processus Node.js ne traitera qu'un seul événement à la fois. Une fois terminé, il entrera immédiatement dans la boucle d'événements pour vérifier les événements suivants. L'avantage est que le processeur et la mémoire peuvent se concentrer sur le traitement d'une seule chose en même temps, tout en essayant de permettre l'exécution en parallèle d'E/S et d'autres opérations fastidieuses. Pour les attaques de connexion à faible vitesse, Node.js ajoute uniquement des requêtes à la file d'attente des événements et attend la réponse du système d'exploitation. Il n'y a donc pas de surcharge multithread, ce qui peut considérablement améliorer la robustesse des applications Web et empêcher les attaques malveillantes.
Mécanisme de boucle d'événement
La soi-disant boucle d'événement signifie que NodeJS utilisera le mécanisme d'événement pour résoudre toutes les opérations asynchrones. Il existe un thread qui boucle constamment pour détecter la file d'attente d'événements.
Toute la logique dans NodeJS est la fonction de rappel des événements, donc NodeJS est toujours dans la boucle d'événements et l'entrée du programme est la fonction de rappel du premier événement de la boucle d'événements. La fonction de rappel d'événement peut émettre une requête d'E/S ou émettre directement l'événement et revenir à la boucle d'événements après l'exécution. La boucle d'événements vérifie la file d'attente des événements pour les événements non gérés jusqu'à la fin du programme. La boucle d'événements de NodeJS est invisible pour les développeurs et est implémentée par la bibliothèque libev. libev vérifie en permanence s'il existe des écouteurs d'événements actifs qui peuvent être détectés et ne quitte pas la boucle d'événements tant qu'aucun écouteur d'événements n'est détecté et que le programme se termine.
Pour plus de connaissances sur les nœuds, veuillez visiter : tutoriel 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!