Maison > interface Web > js tutoriel > Comment puis-je véritablement implémenter des fonctions non bloquantes dans Node.js ?

Comment puis-je véritablement implémenter des fonctions non bloquantes dans Node.js ?

Linda Hamilton
Libérer: 2024-12-10 22:25:10
original
649 Les gens l'ont consulté

How Can I Truly Implement Non-Blocking Functions in Node.js?

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 :

  • Processus enfants : Créer des processus enfants pour exécuter des opérations chronophages. Une fois terminé, vous serez averti de manière asynchrone.
  • Worker Threads : Tirez parti de la fonctionnalité expérimentale Worker Threads de Node.js v11 pour exécuter des tâches dans des threads séparés.
  • Modules complémentaires de code natif : Écrivez vos propres extensions de code natif à l'aide de threads libuv ou de manière asynchrone au niveau du système d'exploitation outils.
  • API asynchrones : Utilisez les API asynchrones existantes, telles que les E/S de fichiers ou les requêtes de base de données, pour éviter de longues tâches dans le 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);
    })
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal