web-dev-qa-db-fra.com

Comment fonctionne node.js?

Je ne comprends pas plusieurs choses à propos de nodejs. Chaque source d’information indique que node.js est plus évolutif que les serveurs Web threadés standard en raison de l’absence de verrouillage des threads et de commutation de contexte, mais je me demande si node.js n’utilise pas de threads, comment traite-t-il les demandes simultanées en parallèle? Que signifie modèle d'événement I/O? 

Votre aide est tres apprecie. Merci

47
Davita

Le nœud est complètement dirigé par les événements. Fondamentalement, le serveur consiste en un thread qui traite un événement après l'autre.

Une nouvelle demande qui arrive est un type d’événement. Le serveur commence à le traiter et lorsqu'il y a une opération de blocage IO, il n'attend pas la fin, mais 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 la traitera (c'est-à-dire continuera à travailler sur la demande) en exécutant le rappel dès qu'il en aura l'heure.

Ainsi, le serveur n'a jamais besoin de créer de threads supplémentaires ni de basculer entre les threads, ce qui signifie qu'il a très peu de temps système. Si vous souhaitez utiliser pleinement plusieurs cœurs matériels, vous devez simplement démarrer plusieurs instances de node.js.

Update Au niveau le plus bas (code C++, pas Javascript), il y a en réalité plusieurs threads dans node.js: il existe un pool de travailleurs IO dont le travail est la tâche recevez les interruptions IO et placez les événements correspondants dans la file d'attente pour qu'ils soient traités par le thread principal. Cela empêche le thread principal d'être interrompu.

77
Michael Borgwardt

Bien que la question soit déjà expliquée il y a longtemps, je pense de même.

Node JS est une technologie à un seul thread. À la base, le créateur de Node JS (Ryan Dahl) craignait que le traitement parallèle utilisant plusieurs threads ne soit pas la bonne solution ni trop compliqué.

si node.js n'utilise pas de threads, comment traite-t-il les requêtes simultanées en parallèle

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

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

Que signifie modèle d'événement d'E/S?

Ans: Le terme approprié est non bloquant I/O. Il ne bloque presque jamais, comme le dit le site officiel de Node JS. Lorsqu'une requête est envoyée au serveur de nœud, elle n'est jamais mise en file d'attente. Il prend la demande et commence à s’exécuter si son opération est bloquante, puis elle est envoyée à la zone des threads en cours de travail et enregistre un rappel pour la même chose dès que l’exécution du code est terminée. qui créent une réponse et l'envoient au client respectif.

Lien utile: cliquez ici

1
Alok Deshwal