Maison  >  Article  >  interface Web  >  Discussion sur les performances d'E/S asynchrones de Node.js_node.js

Discussion sur les performances d'E/S asynchrones de Node.js_node.js

WBOY
WBOYoriginal
2016-05-16 16:34:411203parcourir

Python et Ruby ont également de tels frameworks, mais comme les bibliothèques contenant du code de synchronisation sont inévitablement utilisées dans la réalité, elles n'ont pas grandi. Avant Node.js, la programmation côté serveur JavaScript était presque vide, donc Node.js l'était. capable de construire une base de code où toutes les E/S sont asynchrones.

Le goulot d'étranglement de la plupart des applications Web est l'E/S, c'est-à-dire la lecture et l'écriture du disque, la lecture et l'écriture du réseau et la lecture et l'écriture de la base de données. La stratégie à utiliser pour attendre cette période devient le point clé pour améliorer les performances.

Stratégie de PHP : exécuter plusieurs processus et attendre directement la fin des IO. Inconvénients : plusieurs processus consomment plusieurs copies de mémoire, ce qui rend difficile le partage de données entre processus.
La stratégie C/C habituelle : s'exécute dans plusieurs threads et le programme maintient lui-même l'état de verrouillage. Inconvénients : coût de développement élevé, sujet aux erreurs et difficile à déboguer.
Python (Tornado) : plusieurs requêtes sont exécutées à tour de rôle dans un seul processus, passant à une autre requête lorsque des E/S sont rencontrées. Inconvénients : Ce n'est toujours pas l'utilisation la plus efficace du temps pour une seule demande.
Quelle est « l’utilisation la plus efficace du temps » ? Par exemple, il existe deux requêtes de base de données indépendantes. En PHP, l'une est généralement exécutée en premier, puis la seconde est exécutée une fois l'exécution terminée (le temps total est un b). doit être exécuté en même temps est max(a, b).

Le problème avec Python et les autres langages prenant en charge le multi-threading est qu'au niveau du langage, il est difficile pour les programmeurs de dire à la machine virtuelle que deux opérations doivent être effectuées en même temps, même s'il y en a une. D'une manière ou d'une autre, c'est assez gênant, et la plupart des gens sont trop paresseux pour l'utiliser (cela ne vaut pas non plus la peine de l'utiliser). Et comme Node.js force frénétiquement toutes les E/S à être exécutées de manière asynchrone, on peut également dire que les programmeurs Node.js le connaissent. Avec certaines bibliothèques qui améliorent la lisibilité du code (promesse, asynchrone), ils peuvent facilement exécuter des opérations non liées en parallèle. .

La mise en œuvre des IO asynchrones a été discutée ci-dessus, alors quels sont les avantages des IO asynchrones ? En fait, les E/S asynchrones ne peuvent pas réduire comme par magie la pression sur le serveur. Si vous devez ajouter un serveur, vous devez toujours ajouter un serveur. Cependant, les E/S asynchrones réduiront le temps d'une seule requête et élimineront le temps d'attente inutile dans une requête. demande unique. Par conséquent, le nombre de requêtes traitées par unité de temps n’a pas changé, mais le temps de traitement de chaque requête a diminué. De ce point de vue, le serveur économise également certaines ressources, c'est-à-dire la mémoire consommée par le maintien de la connexion pour chaque requête.

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