71 votes

Comment fonctionne node.js ?

Je ne comprends pas plusieurs choses à propos de nodejs. Toutes les sources d'information disent que node.js est plus évolutif que les serveurs web threadés standard en raison de l'absence de verrouillage des threads et de changement de contexte, mais je me demande, si node.js n'utilise pas de threads, comment il gère les requêtes concurrentes en parallèle ? Que signifie le modèle E/S événementiel ?

Votre aide est très appréciée. Merci

101voto

Michael Borgwardt Points 181658

Node est complètement axé sur les événements. En fait, le serveur consiste en un fil d'exécution qui traite un événement après l'autre.

L'arrivée d'une nouvelle demande est un type d'événement. Le serveur commence à la traiter et, en cas d'opération d'entrée/sortie bloquante, il n'attend pas qu'elle se termine et enregistre une fonction de rappel. Le serveur commence alors immédiatement à traiter un autre événement (peut-être une autre demande). Lorsque l'opération IO est terminée, il s'agit d'un autre type d'événement, et le serveur le traite (c'est-à-dire qu'il continue à travailler sur la demande) en exécutant la fonction de rappel dès qu'il en a le temps.

Le serveur n'a donc jamais besoin de créer des threads supplémentaires ou de passer d'un thread à l'autre, ce qui signifie qu'il a très peu de frais généraux. Si vous souhaitez utiliser pleinement les multiples cœurs de votre matériel, il vous suffit de lancer plusieurs instances de node.js.

Mise à jour Au niveau le plus bas (code C++, pas Javascript), il y a en fait plusieurs fils de discussion dans node.js : il existe un pool de travailleurs IO dont le travail consiste à recevoir les interruptions IO et à placer les événements correspondants dans la file d'attente pour qu'ils soient traités par le thread principal. Cela permet d'éviter que le thread principal ne soit interrompu.

8voto

Alok Deshwal Points 914

Bien que la question ait déjà été expliquée il y a longtemps, je vais vous faire part de mes réflexions à ce sujet.

Node JS est monofilaire JavaScript environnement d'exécution. En fait, le créateur de Node JS (Ryan Dahl) s'inquiétait du fait que le traitement parallèle utilisant de multiples threads n'était pas la bonne méthode ou était trop compliqué.

si Node.Js n'utilise pas de threads, comment gère-t-il les demandes concurrentes en parallèle ?

Ans : C'est une phrase complètement fausse quand vous dites qu'il n'utilise pas les threads, Node Js utilise les threads mais d'une manière intelligente. Il utilise un seul thread pour répondre à toutes les demandes HTTP et plusieurs threads dans le pool de threads (dans libuv) pour gérer toute opération de blocage.

Libuv : Une bibliothèque pour gérer les E/S asynchrones.

Que signifie le modèle d'entrée/sortie d'événement ?

Rép. : Le terme correct est E/S non bloquantes . Il ne bloque presque jamais comme le dit le site officiel de Node JS. Lorsqu'une demande est adressée au serveur Node, elle n'est jamais mise en attente. Il prend la demande et commence à l'exécuter ; si l'opération est bloquante, elle est envoyée dans la zone des threads de travail et enregistre un callback pour la même chose ; dès que l'exécution du code est terminée, il déclenche le même callback et va dans la file d'attente des événements et est traité par la boucle d'événements ; ensuite, il crée la réponse et l'envoie au client respectif.

Lien utile : cliquez ici

5voto

Mazumder Nazmul Points 63

Node JS est un environnement d'exécution JavaScript. Le navigateur et Node JS fonctionnent tous deux avec le moteur JavaScript V8. Node JS utilise un modèle d'E/S non bloquant, piloté par les événements, qui le rend léger et efficace. Les applications Node JS utilisent une architecture de boucle d'événement à fil unique pour gérer les clients concurrents. En fait, sa boucle d'événement principale est mono-threaded mais la plupart des E/S fonctionnent sur des threads séparés, parce que les API d'E/S dans Node JS sont asynchrones/non-bloquantes par conception, afin de s'adapter à la boucle d'événement principale. Considérons un scénario dans lequel nous demandons à une base de données dorsale les détails de l'utilisateur 1 et de l'utilisateur 2, puis nous les imprimons sur l'écran/la console. La réponse à cette demande prend du temps, mais les deux demandes de données utilisateur peuvent être exécutées indépendamment et en même temps. Lorsque 100 personnes se connectent en même temps, plutôt que d'avoir différents threads, Node bouclera sur ces connexions et déclenchera tous les événements que votre code doit connaître. Si une connexion est nouvelle, il vous le dira. Si une connexion vous a envoyé des données, il vous le dira. Si la connexion ne fait rien, il passera au-dessus d'elle plutôt que de lui consacrer un temps CPU précis. Tout dans Node est basé sur la réponse à ces événements. Nous pouvons donc voir le résultat, le CPU reste concentré sur ce seul processus et n'a pas un tas de threads pour l'attention.il n'y a pas de mise en mémoire tampon dans l'application Node.JS il sort simplement les données en morceaux.

0voto

Deepak Mukka Points 61

Bien que la réponse ait été donnée, j'aimerais partager mes connaissances en termes simples.

Nodejs utilise une bibliothèque appelée Libuv donc ce Libuv est écrit en langage C qui utilise le concept de threads . Ces threads sont appelés comme des travailleurs et ces travailleurs prennent en charge les multiples demandes du client.

Le traitement parallèle dans nodejs est réalisé à l'aide de 2 concepts

  1. Asynchrone
  2. IO non bloquante

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X