J'apprends à travers l'architecture de Node.js. J'ai les questions suivantes.

  1. La boucle d'événements fait-elle partie de libuv ou v8?
  2. La file d'attente d'événements fait-elle partie de la boucle d'événements? la file d'attente d'événements est-elle générée par le moteur libuv ou v8 ou la boucle d'événements elle-même?
  3. Quelle est la connexion entre libuv et le moteur v8?
  4. Si la boucle d'événements est à un seul thread, libuv entre-t-il dans l'image pour créer plusieurs threads pour gérer les E / S de fichiers?
  5. Les navigateurs ont-ils un mécanisme de boucle d'événements ou tout simplement Node.js?
16
Prem 13 avril 2018 à 09:58

3 réponses

Meilleure réponse
  1. La boucle d'événement est, avant tout, un concept de haut niveau qui est une partie fondamentale du modèle de programmation JavaScript. Pratiquement, chaque embeddeur V8 doit implémenter une boucle d'événements. V8 fournit une implémentation par défaut, que les intégrateurs peuvent remplacer ou étendre.

  2. Je ne comprends pas la question. (Je suppose que la réponse est "oui", mais quelle est la différence entre "boucle d'événements" et "file d'attente d'événements"?)

  3. Aucun. (Sauf que Node.js utilise les deux.)

  4. Oui, la boucle d'événements est monothread.

  5. Oui, les navigateurs ont également une boucle d'événement (voir question 1).

12
jmrk 13 avril 2018 à 18:36

Passez par ces points: -

  1. Le moteur V8 est le moteur des autocars de train. Il a certaines responsabilités, notamment la fourniture d'une boucle d'événements pour exécuter une tâche asynchrone.

  2. La boucle d'événements est le noyau pour effectuer des tâches asynchrones. Dès que les API Web C ++ terminent une fonction (tâche), un rappel est appelé, il est déplacé vers la file d'attente des événements et attend jusqu'à ce que la pile soit vide. Ainsi, la file d'attente d'événements fait partie de la boucle d'événements et est générée par la boucle d'événements.

  3. Le moteur V8 est utilisé pour exécuter le code javascript que nous écrivons et libuv est un lbrary utilisé pour fournir une fonctionnalité multi-threading dans Nodejs pour exécuter des processus de longue durée.

  4. La boucle d'événements est à thread unique mais Nodejs n'est pas à thread unique car il a un pool de threads libuv dans son runtime qui est responsable du multi-threading.

  5. Les API des navigateurs fournissent également une boucle d'événements.

0
Pavneet Kaur 13 nov. 2019 à 06:55

Ce n'est en fait pas aussi simple que dans le post sélectionné comme réponse. J'espère que mes remarques seront un peu plus exactes. J'espère avoir bien compris Sam Roberts (IBM) dans son exposé sur la boucle d'événement Node.

Pour voir le discours vous-même, vous pouvez aller ici: https://www.youtube.com/watch? v = P9csgxBgaZ8

Ceci est un complément à la réponse donnée par @jmrk

Libuv délègue des tâches au système d'exploitation sous-jacent. Le système d'exploitation devient alors responsable de l'envoi d'une notification lorsqu'un événement se produit que vous écoutez. Il le fait pour de nombreuses opérations que vous effectuez dans Node. Comme: sockets (net / dgram / http / tls / https / pipes child_process, stdin, out, err), timeouts et intervalles.

Cependant, tout ne peut pas être associé de la sorte au système d'exploitation sous-jacent. Parfois, il est nécessaire de créer un thread (il y a 4 bandes de roulement par défaut mais vous pouvez le changer en utilisant UV_THREADPOOL_SIZE). Les opérations sur le système de fichiers, dns.lookup () et certaines fonctions de chiffrement ne sont pas interrogables.

1
Ruud Verhoef 31 oct. 2019 à 12:30