Node.js résout "un problème de thread par connexion" en mettant le modèle basé sur les événements au centre, en utilisant une boucle d'événements au lieu de threads. Toutes les opérations d'E/S coûteuses sont toujours exécutées de manière asynchrone avec un rappel exécuté à la fin de l'opération lancée.
L'observation SI n'importe quelle opération se produit est gérée par des mécanismes de multiplexage tels que epoll ().
Ma question est maintenant:
Pourquoi NodeJS ne se bloque-t-il pas lors de l'utilisation de Systemcallsselect/epoll/kqueue?
Ou NodeJS Single Threaded n’est pas du tout, de sorte qu’un deuxième thread est
nécessaire d'observer toutes les opérations d'E/S avec select/epoll/kqueue?
NodeJS est evented (2ème ligne du site Web ), pas à thread unique. Il gère en interne les threads nécessaires à la gestion de la sélection/epoll/kqueue sans que l'utilisateur ait explicitement à le gérer, mais cela ne signifie pas qu'il n'y a pas d'utilisation de threads.
Non.
Lorsque les opérations d'E/S sont lancées, elles sont déléguées à libuv , qui gère la demande à l'aide de son propre environnement (multithread, asynchrone). libuv annonce l'achèvement des opérations d'E/S, permettant ainsi à tout rappel en attente sur cet événement d'être réintroduit dans le thread principal de la V8 pour exécution.
V8 -> Délégué I/O ( libuv ) -> Pool de threads -> Multi threaded async
JavaScript est à thread unique, tout comme event-model. Mais la pile de nœuds n'est pas à thread unique.
Le nœud utilise le moteur V8 pour la simultanéité.