Maison >interface Web >js tutoriel >Principaux types de files d'attente dans Node.js que vous devez connaître

Principaux types de files d'attente dans Node.js que vous devez connaître

Susan Sarandon
Susan Sarandonoriginal
2025-01-09 14:24:42593parcourir

Top ypes of Queues in Node.js You Should Know

Introduction

Node.js est largement reconnu pour son architecture asynchrone non bloquante, ce qui en fait un choix idéal pour les applications Web évolutives et performantes. L'une des principales raisons de cette fonctionnalité est son modèle basé sur les événements et sa gestion efficace des tâches via sa boucle d'événements. Comprendre l'asynchronicité de Node.js nécessite de se plonger dans les files d'attente qui alimentent ce système. Il est intéressant de noter que Node.js utilise six files d'attente différentes pour la gestion des tâches, par rapport aux deux files d'attente principales trouvées dans les navigateurs. Explorons-les en détail.


Les six files d'attente dans Node.js

Node.js dispose d'un mécanisme sophistiqué pour gérer les tâches à l'aide de six files d'attente :

  1. File d'attente du minuteur

    • Objectif : gère les tâches planifiées avec setTimeout et setInterval.
    • Exemple :
     setTimeout(() => {
       console.log('Timer task executed');
     }, 1000);
    
  • Les tâches de la file d'attente du minuteur sont exécutées après le délai spécifié, mais pas avant que la phase actuelle de la boucle d'événements ne soit terminée.
  1. File d'attente d'E/S (file d'attente de rappel)

    • Objectif : traite les tâches liées aux E/S, telles que la lecture de fichiers ou la gestion des requêtes réseau.
    • Exemple :
     const fs = require('fs');
    
     fs.readFile('file.txt', 'utf8', (err, data) => {
       if (err) throw err;
       console.log(data);
     });
    
  • La file d'attente d'E/S garantit que les rappels sont exécutés une fois l'opération d'E/S terminée.
  1. Vérifier la file d'attente

    • Objectif : exécute les tâches planifiées à l'aide de setImmediate().
    • Exemple :
     setImmediate(() => {
       console.log('Check Queue task executed');
     });
    
  • Remarque : La file d'attente de contrôle a l'une des priorités les plus basses de la boucle d'événements. Les tâches de cette file d'attente sont traitées après la phase d'E/S.
  1. File d'attente des microtâches
    • Objectif : exécute des tâches hautement prioritaires, principalement liées aux promesses et à d'autres microtâches.
    • Sous-catégories :
      • a. file d'attente process.nextTick :
      • Gère les tâches planifiées avec process.nextTick().
      • Les tâches de cette file d'attente reçoivent la priorité la plus élevée et sont exécutées avant toute autre microtâche.
      • b. File d'attente séparée pour les autres promesses :
      • Gère les tâches liées aux promesses résolues.
process.nextTick(() => {
           console.log('process.nextTick task executed');
         });
Promise.resolve().then(() => {
           console.log('Promise resolved task executed');
         });
  • La file d'attente des microtâches se termine toujours avant de passer à la phase suivante de la boucle d'événements.
  1. Fermer la file d'attente

    • Objectif : gère les tâches liées aux opérations de fermeture, telles que les événements socket.on('close').
    • Exemple :
     setTimeout(() => {
       console.log('Timer task executed');
     }, 1000);
    
  • Les tâches de la file d'attente de fermeture sont exécutées lorsqu'une ressource est explicitement fermée.

Comment la boucle d'événements donne la priorité aux files d'attente

La boucle d'événements dans Node.js suit un ordre spécifique de phases pour l'exécution des tâches. Voici la séquence de priorité :

  1. File d'attente des microtâches (process.nextTick) : les tâches de cette file d'attente sont toujours exécutées en premier.
  2. File d'attente des microtâches (Promesses) : Une fois les tâches process.nextTick terminées, les tâches de la file d'attente des promesses sont exécutées.
  3. Timer Queue : les tâches planifiées avec setTimeout ou setInterval sont traitées dans cette phase.
  4. File d'attente d'E/S : gère les opérations d'E/S terminées.
  5. Check Queue : exécute les tâches à partir de setImmediate.
  6. Fermer la file d'attente : traite les rappels de fermeture des ressources.

Comparaison avec les navigateurs

En revanche, les navigateurs ont un modèle de boucle d'événements plus simple avec seulement deux files d'attente principales :

  1. File d'attente des tâches macro : gère les tâches telles que les événements setTimeout, setInterval et DOM.
  2. File d'attente Microtask : similaire à Node.js, cette file d'attente gère des tâches telles que les promesses résolues et les rappels MutationObserver.

Les files d'attente supplémentaires de Node.js lui permettent de gérer une plus grande variété de tâches, ce qui le rend plus adapté aux applications côté serveur.


Informations clés

  • SetImmediate vs setTimeout :

    • Pendant que setTimeout ajoute des tâches à la file d'attente du minuteur, setImmediate met les tâches en file d'attente dans la file d'attente de contrôle.
    • Les tâches de la file d'attente de contrôle (via setImmediate) sont exécutées après la phase d'E/S en cours, tandis que setTimeout attend la phase de minuterie.
  • Dominance des microtâches :

    • Les tâches de la file d'attente des microtâches, en particulier process.nextTick, sont toujours prioritaires, permettant une exécution hautement prioritaire.
  • Concurrence sans chaos :

    • Les files d'attente séparées garantissent que les différents types de tâches sont traités de manière organisée et prévisible, évitant ainsi de manquer de tâches moins prioritaires.

Référence :-

  1. https://frontendmasters.com/courses/servers-node-js/

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