Node.js - 3.12 La boucle d'événements de Node.js expliquée
Node.js exécute votre code sur un seul thread, pourtant il gère plusieurs requêtes. Cette leçon explique comment, grâce à la boucle d'événements. Elle présente aussi le rôle du pool de travail, qui prend en charge les opérations lentes.
Un seul thread, plusieurs requêtes
Node.js exécute le code JavaScript sur un seul thread, comparable à un processus du système d'exploitation. Malgré cela, il traite plusieurs requêtes.
La boucle d'événements démarre automatiquement avec le programme. Elle exécute les fonctions de rappel, appelées callbacks, lorsque l'événement associé se produit.
Chaque fonction de rappel ne voit que ses propres données. Les données d'une requête restent donc séparées de celles d'une autre requête par défaut. Les données globales demandent en revanche davantage de précautions.
Le pool de travail pour les opérations lentes
Les opérations lentes, comme la lecture d'un fichier, sont confiées à un pool de travail. Ce pool est géré automatiquement par Node.js et s'exécute en dehors du code JavaScript.
Une fois la lecture terminée, le rappel associé revient dans la boucle d'événements, qui l'exécute. Ce rappel doit rester rapide, car la boucle ne traite que des tâches courtes.
Les phases de la boucle
La boucle passe par plusieurs phases, dans cet ordre. Chaque phase traite une catégorie de rappels, puis la boucle passe à la suivante.
- Rappels des minuteurs, comme setTimeout et setInterval.
- Rappels des entrées et sorties en attente.
- Phase d'extraction : recherche de nouveaux événements.
- Rappels immédiats, comme setImmediate.
- Rappels de fermeture.
En résumé
Node.js exécute le JavaScript sur un seul thread, grâce à la boucle d'événements. Les opérations lentes sont confiées à un pool de travail, puis leurs rappels sont traités par la boucle. La boucle passe par des phases successives, dont les minuteurs et les entrées et sorties. Ce mécanisme permet à un serveur de rester réactif.
Points clés
- Node.js exécute le JavaScript sur un seul thread.
- La boucle d'événements démarre automatiquement avec le programme.
- Les opérations lentes, comme les fichiers, sont traitées par un pool de travail.
- Les rappels sont exécutés par la boucle quand leur événement se produit.
- Un serveur reste actif tant qu'il écoute des requêtes.
Questions fréquentes
Node.js est-il capable de gérer plusieurs requêtes ?
Oui. Il ne crée pas de thread par requête. Les opérations lentes sont déléguées au pool de travail, et leurs rappels reviennent dans la boucle.
Qu'est-ce qu'un rappel ?
C'est une fonction transmise à Node.js pour être exécutée plus tard, par exemple quand une requête arrive ou qu'une lecture de fichier se termine.
Pourquoi un serveur ne se termine-t-il pas ?
La méthode listen garde un gestionnaire d'événements actif. Node.js continue donc de tourner tant que le serveur écoute.