31 votes

Compréhension de la boucle d'événement Node.js (avec un diagramme)

J'ai lu cela et cela, regardé cela...

J'ai fait un diagramme de comment je le comprends :

entrer la description de l'image ici

  • Les rappels Javascript (fonctions) peuvent être présents dans la file en cours, la file de vérification, la file de rappels de fermeture, la file de minuteries et la file de rappels d'E/S.
  • Le code Js s'exécute uniquement à partir de la file en cours une fonction (tâche/job) à la fois.
  • Le code Js exécuté à ce moment-là peut ajouter des microtâches (tâches) à la file en cours pour être exécutées après lui-même et des macrotâches (tâches) à la file de vérification. Il peut ajouter des tâches à d'autres files seulement indirectement en demandant à l'API de le faire.
  • La phase Idle, prepare est utilisée pour certaines opérations internes de node js (peut-être comme la collecte de déchets).
  • La phase Poll interroge les threads du pool de threads et remplit les files avec les rappels appropriés.
  • Les phases Idle, prepare et poll n'ont pas de files pour les rappels js associés à eux.
  • (quatre) Les threads dans le pool de threads sont tous identiques et n'ont pas de spécialisation.
  • La boucle d'événements prend et exécute les tâches une par une de chaque file jusqu'à ce qu'elle soit vide, puis passe à la file suivante.
  • Les tâches dans les files n'ont pas de tâches (microservices) associées. Les tâches sont créées uniquement pendant l'exécution d'une tâche ou d'une autre tâche et sont présentes uniquement dans la file de tâches en cours.

Est-ce que cette compréhension est correcte ou est-ce que j'ai oublié quelque chose ?

Le fichier MS Power Point .pptx avec le diagramme peut être trouvé ici.

0 votes

Ce texte me semble trop compliqué. Peut-être l'est-il, mais un modèle plus simple n'est-il pas suffisant lorsque vous écrivez du code? Je pense qu'il n'est pas nécessaire de connaître tous les détails de ce qui se passe sous le capot. N'est-il pas suffisant de savoir qu'il y a une file d'attente pour l'instant présent, une file d'attente pour le prochain instant et des rappels en attente du minuteur ou de l'E/S.

8 votes

Je ne peux pas répondre à cela, mais j'apprécie vraiment les efforts que vous avez mis dans votre question.

0 votes

@LorenzMeyer Un modèle plus simple suffit pour écrire du code, mais j'aimerais quand même savoir ce qu'il y a sous le capot. georg, merci :)

2voto

pntripathi9417 Points 86

Le diagramme semble en effet assez compliqué. Je trouve qu'une analogie avec un roi est parfait dans ce contexte pour comprendre de manière simplifiée comment fonctionne la boucle événementielle.

Imaginez que le code que vous voulez exécuter est un roi et que Node est l'armée de serviteurs.

La journée commence par un serviteur réveillant le roi et lui demandant s'il a besoin de quelque chose. Le roi donne au serviteur une liste de tâches et retourne dormir un peu plus longtemps. Le serviteur distribue alors ces tâches à ses collègues qui se mettent au travail.

Une fois qu'un serviteur termine une tâche, il se met en ligne devant le quartier du roi pour rendre compte. Le roi laisse entrer un serviteur à la fois et écoute ce qu'il rapporte. Parfois, le roi donnera au serviteur d'autres tâches avant qu'il ne parte.

La vie est belle, car les serviteurs du roi exécutent toutes ses tâches en parallèle, mais ne rendent compte qu'avec un seul résultat à la fois, permettant ainsi au roi de se concentrer.

Ici, le roi est le processus principal de Node. C'est ainsi que Node.js est dit être monofilaire tout en étant asynchrone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X