Les étapes de la boucle d'événements nodejs : 1. étape des minuteries ; 2. étape des rappels en attente ; 3. étape d'inactivité, préparation ; 4. étape de vérification ; 6. étape de fermeture des rappels.
L'environnement d'exploitation de ce tutoriel : système windows7, nodejs version 12.19.0, ordinateur DELL G3.
boucle d'événements nodejs
Lorsque Node.js est démarré, la boucle d'événements sera initialisée. Chaque boucle d'événements contiendra six étapes de cycle. La boucle temporelle de nodejs est complètement différente des événements du navigateur.
Remarque : Chaque case de l'image est appelée une phase du cycle de pratique, et ces 6 phases sont un cycle d'événements.
Résumé de la phase
-
timers (timers) : Cette phase exécute les fonctions de rappel planifiées par setTimeout() et setInterval().
-
rappels en attente (rappels d'E/S) : Cette phase exécutera presque toutes les fonctions de rappel, à l'exception des rappels de fermeture et ceux programmés par timers et setImmediate().
setImmediate est approximativement égal à setTimeout(callback, 0)
-
idle (idle), prepare : Cette étape n'est utilisée qu'en interne.
-
sondage : Récupère les nouveaux événements d'E/S ; le nœud se bloquera à ce stade, le cas échéant.
-
check (check) : Le rappel défini par setImmediate() sera appelé à ce stade.
-
callbacks close : Les rappels tels que socket.on('close',…) sont appelés à ce stade.
Entre chaque exécution de la boucle d'événements, Node.js vérifie s'il attend des E/S asynchrones ou une minuterie, et s'arrête automatiquement dans le cas contraire.
Si la boucle d'événements entre dans la phase d'interrogation et que le code ne définit pas de minuterie, ce qui suit se produira :
- Si la file d'attente d'interrogation n'est pas vide, la boucle d'événements exécutera de manière synchrone le rappel dans la file d'attente jusqu'à ce que la file d'attente soit vide. vide, ou Le rappel exécuté atteint la limite supérieure du système ;
- Si la file d'attente d'interrogation est vide, ce qui suit se produira :
- Si le code a été défini avec le rappel par setImmediate(), la boucle d'événements entraînera la phase d'interrogation dans la phase de vérification et exécutez la file d'attente de la phase de vérification (la file d'attente dans la phase de vérification est définie par setImmediate).
- Si le code ne définit pas setImmediate(callback), la boucle d'événements se bloquera à ce stade et attendra que le rappel rejoigne la file d'attente d'interrogation, et l'exécutera immédiatement une fois arrivé.
Si la boucle d'événements entre dans la phase d'interrogation et que le code règle la minuterie :
- Si la file d'attente d'interrogation entre dans l'état vide (c'est-à-dire que la phase d'interrogation est inactive), la boucle d'événements vérifiera les minuteries, si il y en a 1 ou plus. L'heure de la minuterie est arrivée, la boucle d'événements entrera dans la phase de minuterie dans la séquence de boucle et exécutera la file d'attente de la minuterie.
【Apprentissage recommandé : "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!