L'Event Loop de Node.js expliquée
Node.js utilise un seul thread. Vous vous demandez peut-être comment il gère des milliers de requêtes simultanément.
Le secret, c'est l'Event Loop.
Au lieu d'attendre qu'une tâche se termine, Node.js délègue les tâches chronophages au système d'exploitation. Il passe immédiatement à la tâche suivante. Cela rend vos applications rapides et réactives.
Bloquant vs Non-bloquant
Si vous utilisez des fonctions synchrones comme readFileSync, le serveur s'arrête. Il attend que la lecture du fichier soit terminée. Aucun autre utilisateur ne reçoit de réponse. Cela détruit vos performances.
Si vous utilisez fs.readFile, le serveur continue de fonctionner. Il gère d'autres requêtes pendant que le fichier est lu en arrière-plan.
Comment fonctionne l'Event Loop
La boucle passe par plusieurs étapes :
• Timers : Gère setTimeout et setInterval.
• Pending Callbacks : Gère les erreurs au niveau du système.
• Poll : Reçoit les nouvelles connexions et gère les E/S (I/O) comme les requêtes de base de données.
• Check : Gère setImmediate.
• Close Callbacks : Gère la fermeture des sockets.
L'ordre de priorité
Toutes les tâches ne se valent pas. Node.js utilise deux files d'attente :
- Microtask Queue : Elle contient les Promises.
- Callback Queue : Elle contient
setTimeoutet les E/S.
La Microtask Queue s'exécute toujours en premier. Si vous avez une Promise et un setTimeout, la Promise se terminera avant le timer.
La Call Stack et les files d'attente
La Call Stack suit le code qui est en cours d'exécution. Lorsqu'une tâche se termine, son callback entre dans une file d'attente. L'Event Loop attend que la Call Stack soit vide avant de récupérer les tâches de la file d'attente.
Évitez ces erreurs :
• N'utilisez pas de boucles infinies. Cela gèle toute votre application. • N'utilisez pas de méthodes de lecture de fichiers synchrones en production. • N'exécutez pas de calculs mathématiques lourds ou de traitement vidéo sur le thread principal.
Pour les tâches lourdes, utilisez les Worker Threads ou des jobs en arrière-plan.
Résumé
Node.js est rapide parce qu'il n'attend pas. Il délègue les tâches d'E/S et utilise l'Event Loop pour gérer les résultats. Cette architecture permet à un seul thread de servir de nombreux utilisateurs.
Quelle partie de l'Event Loop a été la plus difficile à apprendre pour vous ? Dites-le-moi dans les commentaires.