web-dev-qa-db-fra.com

NodeJS est-il vraiment mono-thread?

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?

58
Filipe Santos

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.

108
Femi

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

8
serkan

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é.

0
Pujan Srivastava