Maison > Article > interface Web > Pourquoi une boucle While peut-elle bloquer la boucle d'événements Node.js ?
Pourquoi une boucle While peut bloquer la boucle d'événements Node.js
Dans Node.js, une boucle d'événements constitue le cœur du processus asynchrone modèle de programmation, gérant le traitement et l’exécution des événements. Cependant, une boucle while peut perturber ce processus, entraînant le blocage de la boucle d'événements.
Comprendre la boucle d'événements
La boucle d'événements fonctionne comme une boucle continue avec le séquence suivante :
Impact d'une boucle While
Une boucle while, lorsqu'elle est exécutée, empêche le thread JavaScript d'accomplir des tâches. Cela signifie que les événements suivants dans la file d'attente des événements ne peuvent pas être traités car le thread est toujours occupé à exécuter la boucle.
Exemple : Boucle infinie
Le code suivant montre comment un La boucle while peut bloquer la boucle d'événements :
<code class="javascript">var done = false; setTimeout(function() { done = true; }, 1000); while (!done) { /* no operation */ } console.log("Done!");</code>
Dans cet exemple, la minuterie sera définie sur true après 1 seconde, mais la boucle while continuera à s'exécuter indéfiniment, empêchant l'accès au journal de la console.
Réécriture du code
Pour éviter de bloquer la boucle d'événements, nous pouvons modifier le code pour utiliser une approche événementielle :
<code class="javascript">var done = false; setTimeout(function() { done = true; }, 1000); const interval = setInterval(() => { if (done) { clearInterval(interval); console.log("Done!"); } }, 100);</code>
Dans ce code révisé, un minuteur d'intervalle est utilisé pour vérifier périodiquement la valeur de done. Lorsque cela devient vrai, le minuteur d'intervalle est effacé et le journal de la console est exécuté. Cette approche permet à d'autres événements d'être traités par la boucle d'événements en attendant la fin du minuteur.
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!