Maison  >  Article  >  interface Web  >  Qu’est-ce que node.js ? Quels sont les scénarios applicables ?

Qu’est-ce que node.js ? Quels sont les scénarios applicables ?

藏色散人
藏色散人original
2021-12-20 10:13:303912parcourir

node.js est une plate-forme construite sur le runtime JavaScript Chrome. Ses scénarios applicables incluent des applications de musique en ligne localisées, des applications de recherche en ligne localisées, des applications en ligne localisées, etc.

Qu’est-ce que node.js ? Quels sont les scénarios applicables ?

L'environnement d'exploitation de cet article : système windows7, version nodejs10.16.2, ordinateur Dell G3.

Qu'est-ce que node.js ?

En termes simples, Node.js est un JavaScript exécuté côté serveur.

Node.js est une plate-forme construite sur le runtime JavaScript Chrome.

Node.js est un environnement JavaScript côté serveur d'E/S basé sur le moteur V8 de Google. Le moteur V8 exécute Javascript très rapidement et offre de très bonnes performances.

Comprendre les scénarios applicables de NodeJS en principe

NodeJS est une plate-forme JS côté serveur populaire ces dernières années, d'une part, elle bénéficie de ses excellentes performances dans le traitement d'une concurrence élevée sur le back-end. d'autre part, sur la plateforme nodeJS L'essor de puissantes applications de code et de gestion de projet telles que npm, grunt et express a presque redéfini les méthodes de travail et les processus du front-end.

Le succès de NodeJS marque sa puissance, mais toutes les situations ne sont-elles pas adaptées à l'utilisation de NodeJS comme plateforme côté serveur ?

La réponse est bien sûr non, et il existe différentes opinions sur Internet. Ensuite comprenons l'application de NodeJS à partir du principe.

Avant de parler de NodeJS, jetons d'abord un coup d'œil à la manière traditionnelle (représentée par Apache) de de la plate-forme de traitement côté serveur de gérer la concurrence.

1. Le mode multithread à haute concurrence d'Apache

Apache est actuellement le logiciel de serveur Web numéro un au monde. Il est bien accueilli par la majorité des sélecteurs de technologie de serveur car il prend en charge la concurrence multithread. Mais plus tard, Apache a progressivement exposé ses défauts dans certaines applications WEB à grande échelle : le blocage.

Certains étudiants peuvent se demander : Apache ne gère-t-il pas la concurrence avec le multi-threading ? Pourquoi y a-t-il toujours un blocage ?

Pour comprendre cela, nous devons d'abord comprendre le concept de threads

1.1 Qu'est-ce qu'un thread ?

Nous citons l'explication officielle : la plus petite unité CPU que les threads peuvent exécuter indépendamment peut s'exécuter simultanément dans le même processus et partager l'espace d'adressage mémoire du processus (notez cette fonctionnalité) .

Nous pouvons voir que les threads d'un même processus partageront les mêmes fichiers et la même mémoire (espace d'adressage mémoire), vous pouvez donc imaginer que lorsque différents threads doivent occuper la même variable, ils seront alloués selon le principe du premier arrivé, premier. -served., lorsque le thread qui arrive en premier est en cours d'exécution, le thread suivant ne peut qu'attendre, c'est-à-dire qu'il rejoint la séquence de file d'attente de blocage. C'est donc ce qui provoque le blocage du thread.

Ainsi, bien qu'un processus puisse prendre en charge plusieurs threads,

ils semblent s'exécuter simultanément, mais ne sont pas synchronisés les uns avec les autres. Plusieurs threads d'un processus partagent le même espace d'adressage mémoire, ce qui signifie qu'ils peuvent accéder aux mêmes variables et objets, et qu'ils allouent des objets à partir du même tas. Bien que cela facilite le partage d'informations entre les threads, le programmeur doit veiller à ce qu'elles n'interfèrent pas avec d'autres threads du même processus.

Après avoir compris les défauts du parallélisme multithread, nous pouvons mieux comprendre la puissance de NodeJS. Parce que NodeJS est asynchrone et monothread !

2. Principe d'E/S asynchrone de NodeJS

Regardons d'abord un morceau de code permettant à Apache de demander la base de données :

Lorsque le code est exécuté jusqu'à la première ligne, le thread se bloquera, attendez que la requête renvoie le résultat, puis continuez le traitement. Pour des raisons telles que l'interrogation de la base de données, la lecture et l'écriture du disque, la communication réseau (appelée E/S), le temps de blocage sera très long (par rapport à la fréquence totale du processeur). Pour un accès à haute concurrence, d'une part, les threads sont bloqués et attendus pendant longtemps, d'autre part, de nouveaux threads sont continuellement ajoutés pour faire face aux nouvelles demandes, ce qui gaspillera en même temps beaucoup de ressources système. , l'augmentation du nombre de threads prendra également beaucoup de temps CPU pour traiter le changement de contexte mémoire. Voyons comment node.js le gère.

Voir,

juste quatre mots : rappel asynchrone. Le deuxième paramètre de requête est une fonction de rappel. Lorsque le processus exécute db.query, il n'attendra pas que le résultat soit renvoyé, mais continuera directement à exécuter les instructions suivantes jusqu'à ce qu'il entre dans la boucle d'événements. Lorsque le résultat de l'exécution de la base de données revient, l'événement sera envoyé à la file d'attente des événements et la fonction de rappel précédente ne sera appelée qu'une fois que le thread entrera dans la boucle d'événements. Un terme plus technique est E/S asynchrones. Un seul fil suffit.

Alors pourquoi NodeJS est-il monothread mais capable de réaliser une implémentation asynchrone ? Ici, nous allons à l'image précédente et cliquons sur la file d'attente des événements dans l'image

Voir, le principe de fonctionnement de NodeJS est en fait la boucle d'événement. On peut dire que chaque élément de la logique NodeJS est écrit dans la fonction de rappel et que la fonction de rappel est exécutée de manière asynchrone après son retour !

En voyant cela, vous ne pouvez pas vous empêcher de vous demander si tous les traitements de NodeJS sont asynchrones, ne serait-ce pas un succès ? Faux, faux, faux ! Bien sûr que non, n'oubliez pas que la base sur laquelle NodeJS les implémente est un seul thread. C'est vrai, un seul thread ! Un seul thread gère toutes les opérations !

Vous pouvez imaginer que NodeJS fait face à une armée de 100 000 utilisateurs simultanés dans le vent froid. OK, pas de problème, les ennemis qui surgissent sont jetés dans la ville, et les ennemis qui surgissent sont à nouveau jetés dans la ville. Tous les habitants de la ville sont des soldats et peuvent très bien digérer ces ennemis. Mais si un personnage comme Zhang Fei et Zhao Yun apparaît, le vieux Node se sentira malheureux. Il combattra Zhang Fei pendant 300 rounds, le paralysera, puis le jettera dans la ville. Ensuite, les 100 000 soldats derrière devront attendre ces 300 cartouches. . .

Alors qu'est-ce que cela signifie ? Cela signifie que NodeJS ne bloque pas, mais que le blocage ne se produit pas lors du processus de rappel ultérieur, mais se produit lors du calcul et du traitement de la logique par NodeJS lui-même. Nous savons déjà que NodeJS dispose de capacités de distribution extrêmement puissantes et peut boucler des événements pour des rappels asynchrones. Mais si vous rencontrez des opérations logiques complexes lors de la boucle d'événements, comment un seul thread mince peut-il prendre en charge des millions de logiques + concurrence ? Toutes les opérations fastidieuses de NodeJS telles que les E/S et la communication réseau peuvent être confiées aux threads de travail pour exécution et rappel, c'est donc très rapide. Mais pour le fonctionnement normal du CPU, celui-ci ne peut résister que tout seul.

Cela dit, vous avez probablement une idée générale des fonctionnalités de NodeJS. Les scénarios applicables sont donc pratiquement prêts à arriver~ !

3. Scénarios d'application de NodeJS

Étant donné que NodeJS a une forte capacité à gérer la concurrence, mais une faible capacité à gérer le calcul et la logique, par conséquent, si nous déplaçons toutes les opérations logiques complexes vers le front-end (client) pour les terminer, NodeJS Il suffit de fournir des E/S asynchrones, afin qu'un traitement hautes performances avec une concurrence élevée puisse être obtenu. Il existe de nombreuses situations, telles que : l'API RESTFUL, le chat en temps réel, l'application d'une seule page avec une logique client forte. Des exemples spécifiques incluent : une application de musique en ligne localisée, une application de recherche en ligne localisée, une application en ligne localisée, etc.

Au fait, Apache a été tellement supprimé, alors donnez-moi un doux rendez-vous. Apache a les caractéristiques d'un espace d'adressage de mémoire partagée multithread à haute concurrence, ce qui signifie que si le serveur est suffisamment puissant et que le processeur a suffisamment de cœurs, Apache fonctionnera très bien, il est donc adapté au traitement asynchrone (simultané) avec relativement peu d'expériences. Applications avec de grandes quantités de calculs et une logique métier back-end complexe.

Apprentissage recommandé : "Tutoriel vidéo Node.js"

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!

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