devstory

Comprendre Event Loop dans NodeJS

  1. Vue d'ensemble sur NodeJS Event Loop

1. Vue d'ensemble sur NodeJS Event Loop

NodeJS est une application de thread unique (Single Thread), qui fonctionne sur une plateforme écrite en C++. Cette plateforme utilise le multi-thread pour effectuer des tâches en même temps.
La figure suivante illustre des demandes (request) envoyés à part des utilisateurs au serveur de NodeJS.
Chaque demande (request) de l'utilisateur est traitée comme un événement (event) par le NodeJS. Elles sont placées dans un Event Queue (La liste des événements). Le NodeJS utilise le principe FIFO (First In First Out), ce qui signifie que les premières demandes arrivant sera traités avant tout.
Event Loop
Comme une boucle infinie, elle transmet les demandes au Thread Pool (Pool de threads) et chaque requête est enregistrée une fonction Callback. Quand une requête est terminée, la fonction Callback correspondante sera appelée à être exécuté.
Thread Pool
Étant un programme écrit par le langage C++, il soutient les multi-threads (Multi Threads). Donc, des demandes seront traitées sur différent threads. Le NodeJS fournit également des processus multiples (Multi Processes). Cela signifie qu'ils peuvent être exécutés sur des cœurs (Core) différents.
Lorsque le traitement d'une demande est terminé, le NodeJS appelera la fonction Callback (Enregistré pour cette demande) pour l'exécuter.
LES CONCLUSIONS:
La première conclusion basique : Si chaque connexion du Server ouvert un thread, il prendra beaucoup de mémoire. Ceci a été prouvé lorsque vous comparez Apache et Nginx (Les deux Web Server déploient des applications PHP). Le Apache utilise plus de mémoire que le Nginx.
En fait, le NodeJS est similaire au Nginx car ils utilisent qu'un seul thread (Single thread) pour recevoir des connexion de l'utilisateur et traiter chaque demande de l'utilisateur comme un événement.
La deuxième conclusion basique : Des activités I/O coûtent beaucoup de ressources du système, donc le NodeJS gère l'utilisation des activités I/O strictement. Par conséquent, vous devez utiliser une Callback quand vous exécutez les devoirs relatifs à I/O.
À la base, plusieurs choses dans le NodeJS exécutent parallèlement sur différent threads mais elles sont gérées directement par le NodeJS. Par exemple : Thread Pool. Tous ce que vous avez écrit sont exécutent sur un seul thread (single thread).