Le thread principal du nœud exécute le code js. Lorsqu'il s'agit d'une opération asynchrone, le nœud le remet à libuv pour exécution, puis exécute le code derrière l'opération asynchrone. Une fois libuv exécuté, il sera placé dans une file d'attente circulaire. libuv aura une boucle d'événement (Event Loop) similaire à while (true). Cette boucle d'événement existe dans le thread unique du nœud (c'est-à-dire le thread principal). .Le thread principalboucleObtient la fonction de rappel d'exécution d'événement.
Alors, quel est le processus de boucle du thread principal pour récupérer les événements et exécuter le code asynchrone derrière celui-ci ? Il est impossible pour un thread de faire deux choses en même temps. Après avoir exécuté le code asynchrone, le processeur bouclera-t-il pour récupérer les événements lorsqu'il est inactif ?
Tout d'abord, indiquez clairement que le thread principal n'interrogera pas lors de l'exécution de code.
Ainsi, le thread principal exécutera tout le code initial (code non-callback) avant d'interroger la file d'attente d'événements (la file d'attente d'événements peut être considérée comme un objet js lors de l'interrogation) car en théorie le thread principal du moteur js ne peut reconnaître que code js.
Mais une fois le code initial exécuté, le thread principal js interrogera les événements lorsqu'une fonction de rappel est obtenue, le moteur js n'interrogera pas à nouveau tant que le code de rappel actuel n'est pas exécuté.
Pour résumer, seul le moteur js interrogera lorsqu'il n'y a pas de code à exécuter En d'autres termes, il n'y a toujours qu'une seule fonction de rappel dans le thread principal js
.
Je pense que cet article peut résoudre vos doutes