J'apprends à travers l'architecture de Node.js. J'ai les questions suivantes.
- La boucle d'événements fait-elle partie de libuv ou v8?
- 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?
- Quelle est la connexion entre libuv et le moteur v8?
- 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?
- Les navigateurs ont-ils un mécanisme de boucle d'événements ou tout simplement Node.js?
3 réponses
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.
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"?)
Aucun. (Sauf que Node.js utilise les deux.)
Oui, la boucle d'événements est monothread.
Oui, les navigateurs ont également une boucle d'événement (voir question 1).
Passez par ces points: -
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.
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.
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.
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.
Les API des navigateurs fournissent également une boucle d'événements.
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.
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.