Implémentation correcte des fonctions non bloquantes dans Node.js
Malgré l'idée fausse, le simple fait d'envelopper du code dans une promesse ne le rend pas non -blocage. La fonction d’exécuteur Promise, étant de nature synchrone, bloque l’exécution. C'est la raison du délai observé dans le code fourni avant d'imprimer les lignes suivantes.
Le problème avec le code fourni
Le code semble initialement non bloquant , en utilisant une promesse pour renvoyer le résultat du longRunningFunc intensif en calcul. Cependant, lors de l'exécution, nous observons un délai avant l'impression des deuxième et troisième lignes, indiquant que le programme attend la résolution de la promesse.
Vrai code non bloquant dans Node.js
Pour créer du code véritablement non bloquant dans Node.js, nous disposons de plusieurs options :
Révision de l'exemple
Bien qu'encapsuler le code dans une promesse ne soit pas suffisant pour un comportement non bloquant, nous pouvons utiliser setTimeout() pour planifier la boucle for pour une exécution ultérieure :
function longRunningFunc(val, mod) { return new Promise((resolve, reject) => { setTimeout(() => { let sum = 0; for (let i = 0; i < 100000; i++) { for (let j = 0; j < val; j++) { sum += i + j % mod; } } resolve(sum); }, 10); }); }
Cette approche décale le timing de la boucle for, donnant l'apparence de non-blocage comportement. Cependant, il est important de noter que la boucle for s'exécute toujours de manière synchrone une fois planifiée. Pour obtenir un véritable code non bloquant, nous devrons utiliser l'une des techniques décrites précédemment.
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!