Nœud.js compréhension de boucle d'événement (avec un diagramme)
j'ai fait un diagramme de la façon dont je le comprends:
- les callbacks (fonctions) Javascript peuvent être présents dans le
current queue
,check queue
,close callbacks queue
,timers queue
etI/O callbacks queue
. - le code Js n'est exécuté que depuis le
current queue
une fonction (tâche/de travail) à la fois. - code JS exécuté à le moment peut ajouter des microtasks( jobs) à la
current queue
à exécuter après lui - même et les macrotasks (tâches) à lacheck queue
. Il ne peut ajouter des tâches à d'autres Files d'attente qu'indirectement en demandant à l'API de le faire. Idle, prepare
la phase est utilisée pour certains noeuds internes js business (peut-être comme la collecte des ordures).Poll
phase recherche les threads de la liste de threads et remplit les files d'attente avec les callbacks appropriés.Idle, prepare
etpoll
les phases n'ont pas de file d'attente pour js des rappels qui leur sont associés.- (quatre) Threads in the
thread pool
sont toutes identiques et n'ont pas de spécialisation. - la boucle D'événement prend et exécute les tâches une par une à partir de chaque file d'attente jusqu'à ce qu'elle soit vide puis passe à la file d'attente suivante.
- les tâches dans les files d'attente n'ont aucun emploi (microservices) associé à elles. Des emplois sont créés uniquement lors de l'exécution d'une tâche ou d'un autre emploi, et sont présents uniquement dans le
current task queue
.
c'Est que c'est bien compris ou je rate quelque chose?
MS Power Point .pptx avec le diagramme peut être trouvé ici.
1 réponses
le diagramme semble assez compliqué. Je trouve une analogie de king tout à fait parfaite dans ce contexte pour avoir une compréhension de niveau gris sur la façon dont l'événement-boucle fonctionne.
Imaginez le code que vous voulez exécuter est un roi et un nœud est l'armée de fonctionnaire.
la journée commence par un serviteur qui réveille le roi et lui demande s'il besoin de quelque chose. Le roi donne au serviteur une liste de tâches et va de retour de dormir un peu plus. Le serviteur distribue maintenant ces tâches parmi ses collègues et qu'ils se mettent au travail.
une fois qu'un serviteur a terminé une tâche, il s'aligne devant le quartier des rois signaler. Le roi laisse entrer un serviteur à la fois, et il écoute choses-t-il. Parfois, le roi donne plus de tâches au serviteur. sur le moyen de sortir.
la vie est belle, car les serviteurs du roi accomplissent toutes ses tâches parallèle, mais avec un seul résultat à la fois, pour que le roi puisse concentrer.
le roi ici est le processus de noeud principal. C'est ainsi qu'on dit que les nodejs sont à filetage simple mais asynchrones.