Maison >interface Web >js tutoriel >Pourquoi JavaScript ne dort jamais : un guide simple de la boucle d'événements

Pourquoi JavaScript ne dort jamais : un guide simple de la boucle d'événements

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 03:24:03674parcourir

JavaScript en tant que langage à thread unique : Mentionnez brièvement comment JavaScript ne gère qu'une seule tâche à la fois, mais la boucle d'événements donne l'impression du contraire

. Fonctionnement de la boucle d'événement : Les étapes clés du processus de boucle d'événement

  • Pile : La pile d'appels gère le code synchrone.

  • File d'attente : La file d'attente de rappel contient les tâches en attente d'exécution.

  • Boucle : La boucle d'événement vérifie si la pile est vide avant
    déplacer les tâches de la file d'attente vers la pile.

Why JavaScript Never Sleeps: An Easy Guide to the Event Loop

Répartition du Workflow :

Exécution initiale du code :

console.log('Hi');
$.get('url', function cb(data) {
  console.log(data);
});
console.log('JSConfEU');

  • Lorsque ce code commence à s'exécuter, console.log('Hi') est ajouté à la pile d'appels et "Hi" est imprimé dans la console.

Appel de fonction asynchrone ($.get) :

  • Ensuite, $.get('url', function cb(data) { ... }) est rencontré. Cette fonction lance une requête HTTP pour récupérer les données de « url ».

  • Au lieu de bloquer le thread principal, la requête est envoyée à l'environnement des API Web (qui fait souvent partie du navigateur).

  • La fonction de rappel (cb) est enregistrée pour s'exécuter une fois la requête HTTP terminée, mais elle n'est pas exécutée immédiatement. La requête HTTP continue de se charger dans la section API Web, marquée comme XHR (XMLHttpRequest), ce qui est typique pour le traitement des requêtes réseau.

Passer à la prochaine ligne synchrone :

  • javaScript passe à la ligne suivante, console.log('JSConfEU'), qui est ajoutée à la pile d'appels. "JSConfEU" est ensuite imprimé sur la console.

Boucle d'événements et file d'attente de tâches :

  • Une fois tout le code synchrone terminé, la pile d'appels devient vide et JavaScript attend la fin de toutes les tâches asynchrones.

  • Une fois la requête HTTP terminée, la fonction de rappel (cb) est déplacée des API Web vers la file d'attente des tâches.

  • La boucle d'événements vérifie en permanence si la pile d'appels est vide et, lorsqu'elle l'est, la boucle d'événements déplace les tâches de la file d'attente des tâches vers la pile d'appels

Exécution du rappel :

  • Lorsque la boucle d'événements place la fonction de rappel sur la pile d'appels, elle exécute console.log(data); dans la fonction de rappel, impression des données reçues de la requête HTTP sur la console.

Résumé :

Ce flux montre comment la boucle d'événement gère le code asynchrone
par :

  • Traitement du code synchrone immédiatement sur la pile d'appels.

  • Gérer les tâches asynchrones dans les API Web et, une fois terminées, les déplacer vers la file d'attente des tâches.

  • Permettre à la boucle d'événements de déplacer les tâches vers la pile d'appels uniquement lorsqu'elle est vide, garantissant ainsi une exécution de code non bloquante.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn