Comprendre l'Event Loop de Node.js

L'Event Loop n'est pas un travailleur. C'est un coordinateur.

De nombreux développeurs trouvent l'Event Loop complexe. La difficulté provient souvent du mélange de trop nombreux concepts à la fois. Il faut suivre libuv, la Call Stack, les Promises et l'I/O, tout cela en même temps.

Voici la vérité toute simple. L'Event Loop planifie le travail. Il ne l'exécute pas.

JavaScript s'exécute sur un seul thread. Cela signifie que le code s'exécute de manière linéaire. Une tâche doit se terminer avant que la suivante ne commence. Nous avons besoin d'un système pour gérer les tâches asynchrones, comme la lecture de fichiers ou les requêtes réseau, sans interrompre l'ensemble du programme.

Comment cela fonctionne :

L'Event Loop déplace les callbacks de différentes files d'attente vers la Call Stack. Imaginez chaque phase comme une file d'attente. L'Event Loop est la personne qui fait passer les gens de la file à la salle.

Les principales phases sont :

Une erreur courante est de penser que l'Event Loop possède sa propre Call Stack. Ce n'est pas le cas. Le runtime possède une seule Call Stack et une seule microtask queue.

Le processus suit ce flux :

  1. L'Event Loop sélectionne un callback de la phase actuelle.
  2. Il pousse ce callback dans la Call Stack.
  3. La Call Stack exécute le code.
  4. Une fois le callback terminé, le moteur vide la microtask queue. C'est là que résident les Promises et l'async/await.
  5. L'Event Loop passe à la phase suivante.

Si vous utilisez setTimeout(..., 0), cela va dans la phase Timers. Si vous utilisez setImmediate(...), cela va dans la phase Check.

Le gros du travail est effectué par le noyau de l'OS et libuv. L'Event Loop indique simplement à JavaScript quand il est temps de réagir.

Source: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a