Maison  >  Article  >  interface Web  >  Comprendre la boucle d'événements de Node dans un seul article

Comprendre la boucle d'événements de Node dans un seul article

青灯夜游
青灯夜游avant
2023-04-06 18:39:262505parcourir

Cet article parle de la boucle d'événements dans Nodejs. J'espère aider tout le monde à comprendre la boucle d'événements dans Nodejs. Désormais, vous n'aurez plus peur de l'âme de l'intervieweur qui vous demande : Parlez de la boucle d'événements dans Nodejs !

Comprendre la boucle d'événements de Node dans un seul article

Je pense que l'intervieweur demandera à chacun lors de l'entretien : "Parlez-moi de la boucle événementielle de Nodejs".

Parce qu'on m'a posé cette question aussi, mais à chaque fois je me sens gêné.

Il existe de nombreuses introductions à ce problème sur divers blogs techniques, mais je ne l'ai jamais compris. Parce que ces articles commencent souvent par beaucoup de diagrammes et de terminologie, ce qui éteint instantanément le courage de comprendre. [Tutoriels associés recommandés : Tutoriel vidéo Nodejs, Enseignement de la programmation]

Mais je n'ai pas compris, a quand même demandé l'intervieweur, alors avec des larmes et des dents serrées, j'ai consulté quelques tutoriels et j'ai obtenu Le résumé sera partagé immédiatement avec tout le monde.

1. Qu'est-ce que la boucle événementielle ?

En un mot : la boucle d'événements est le mécanisme permettant à Nodejs de gérer les opérations asynchrones.

Js est monothread, pourquoi Nodejs peut-il gérer des opérations asynchrones ?

Parce que Nodejs transmet les opérations multithread au noyau du système.

Image ci-dessus :

Nodejs est comme un enfant intelligent. Il ne peut pas implémenter d'opérations multithread basées sur Js lui-même, mais il envoie des opérations multithread au noyau du système.

Parce que la plupart des noyaux système sont multithreads et que le noyau n'est pas si facile à exécuter, alors Nodejs peut s'asseoir et se détendre ?

2. Pourquoi avons-nous besoin d'une boucle d'événements ?

(Expliquez d'abord le nom de la boucle d'événement. Nodejs est piloté par les événements. Quand et quand faire quelque chose, ce qui est fait est défini dans la fonction de rappel ;

Par conséquent, la fonction de rappel peut être définie comme une fonction de traitement d'événements ; donc gérer les rappels Le mécanisme de la fonction s'appelle la boucle d'événements ;)

Le noyau étant si puissant, les Nodejs peuvent-ils être épargnés ?

Non, une fois l'exécution du noyau terminée, Nodejs doit exécuter la fonction de rappel correspondante.

Nous avons donc besoin d'un mécanisme pour l'aider à gérer et à maintenir ces fonctions de rappel d'opérations asynchrones afin de les empêcher de se battre et de gâcher.

Ainsi exécuté de manière efficace. C'est pourquoi la ---boucle d'événement--- est nécessaire.

Résumé : La boucle d'événements est utilisée par Nodejs pour contrôler l'ordre d'exécution des rappels de code asynchrone !

3. Comment comprendre la boucle événementielle ?

? Astuce 1 : Les tâches synchrones sont toujours exécutées plus tôt que les tâches asynchrones ;

Classification des API asynchrones

Inutile de dire les tâches synchrones, ici nous classons d'abord les API asynchrones dans Nodejs :

Facile à comprendre, pour Les trois API asynchrones ci-dessus fournissent trois types de files d'attente dans la boucle d'événements

Étrange ? Pourquoi n’y a-t-il pas de process.nectTick ?

Haha, c'est parce que process.nectTick lui-même est bizarre !

process.nectTick

Bien que process.nectTick soit une API asynchrone, elle ne fait pas partie de la boucle d'événements.

Photo ci-dessus :

Un autre concept est impliqué ici : Module asynchrone !

Module asynchrone

est ce type magique, Nodejs utilise la bibliothèque libuv pour appeler le noyau afin de réaliser des opérations multithread !

Dans quelle mesure cela a-t-il à voir avec process.nectTick ?

Oui, car process.nectTick peut être compris comme faisant partie du module asynchrone.

Par conséquent, process.nectTick sera toujours appelé avant la boucle d'événement !

 ? Astuce 2 : process.nectTick est la plus rapide à exécuter parmi toutes les tâches asynchrones

(Remarque : comprenez Tick

Les trois files d'attente de la boucle d'événements s'exécutent pendant une semaine et deviennent un Tick !)

D'accord, je comprends !

Attendez... il semble qu'il manque quelque chose ? Comment la promesse est-elle exécutée ?

Promesse

En plus de la file d'attente nextTick, il existe également une file d'attente spéciale : la file d'attente des microtâches. La file d'attente des microtâches est principalement utilisée pour gérer l'exécution des fonctions de rappel Promise.

Alors quel est l'ordre d'exécution de la file d'attente des microtâches ?

Photo ci-dessus :

 ? Astuce 3 : La file d'attente des microtâches est ajoutée derrière la file d'attente process.nectTick et devant la boucle d'événements

Tant de choses ont été dites ci-dessus, regardons-la dans son ensemble

 ;

 ? Astuce 4 : La pratique apporte de vraies connaissances

En utilisant la théorie ci-dessus, si vous êtes intelligent, pouvez-vous analyser l'ordre d'impression final ?

console.log('同步代码')setImmediate(() => {    console.log('setImmediate');})setTimeout(() => {    console.log('setTimeout');}, 100)Promise.resolve().then(() => {    console.log('promise');})process.nextTick(() => {    console.log('Tick');})复制代码

Ensuite, la prochaine fois, nous combinerons des cas d'entretien spécifiques pour voir quel est leur ordre d'impression.

Pour plus de connaissances sur les nœuds, veuillez visiter : tutoriel Nodejs !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer