Comment implémenter correctement des fonctions non bloquantes dans Node.js
Malgré sa nature asynchrone, Node.js ne fournit pas de solution simple moyen d’exécuter du code de manière non bloquante. Les fonctions enveloppées dans des promesses, comme vous l'avez fait dans votre exemple, s'exécutent toujours de manière synchrone et bloquent le thread principal.
Comprendre le modèle d'exécution de Node.js
Contrairement aux vrais langages asynchrones, Node.js exécute du code JavaScript dans une boucle d'événements à thread unique. Tout le code, y compris les fonctions d'exécution de Promise, bloque le thread principal jusqu'à son achèvement. Par conséquent, l'attente d'un comportement non bloquant dans votre code est incorrecte.
Atteindre un code non bloquant réel
Pour créer un code véritablement non bloquant, vous devez employer techniques qui suppriment les tâches intensives du thread principal :
Exemple : Remédier à votre code
Pour présenter un comportement non bloquant dans votre code, intégrez une fonction setTimeout(). Cependant, cela ne modifie que le timing d'exécution du code, et non sa nature bloquante :
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { setTimeout(() => { // Time-consuming loop resolve(sum) }, 10); }) }
Conclusion
Bien que les promesses soient utiles pour gérer les tâches asynchrones, elles seules le font ne rend pas les fonctions non bloquantes. Pour obtenir un véritable comportement non bloquant, considérez les techniques décrites ci-dessus pour exécuter du code en dehors du thread principal. En comprenant les limites du modèle d'exécution de Node.js, vous pouvez développer du code qui utilise efficacement ses capacités asynchrones.
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!