webentwicklung-frage-antwort-db.com.de

Ist NodeJS wirklich Single-Threaded?

Node.js löst das Problem "Ein Thread pro Verbindung", indem das ereignisbasierte Modell im Kern verwendet wird und eine Ereignisschleife anstelle von Threads verwendet wird. Alle kostspieligen E/A-Vorgänge werden immer asynchron mit einem Rückruf ausgeführt, der ausgeführt wird, wenn der initiierte Vorgang abgeschlossen ist.

Die Beobachtung, ob eine Operation auftritt, wird durch Multiplexing-Mechanismen wie epoll () gehandhabt.

Meine Frage ist jetzt:

  • Warum blockiert NodeJS nicht, während das blockierende Systemcallsselect/epoll/kqueue verwendet wird? 

  • Oder ist NodeJS überhaupt kein Threaded, so dass ein zweiter Thread ist
    notwendig, um alle I/O-Operationen mit select/epoll/kqueue zu beobachten?

58
Filipe Santos

NodeJS ist evented (2. Zeile von website ), kein Singlethread. Er erledigt intern das Threading, das zur Auswahl von/epoll/kqueue erforderlich ist, ohne dass der Benutzer dies explizit verwalten muss.

108
Femi

Nein.

Wenn E/A-Operationen initiiert werden, werden sie an libuv delegiert, das die Anforderung in einer eigenen Umgebung (asynchrones Multithreading) verwaltet. libuv kündigt den Abschluss von E/A-Vorgängen an, wodurch alle auf dieses Ereignis wartenden Rückrufe erneut zur Ausführung in den V8-Hauptthread aufgenommen werden können.

V8 -> Delegate I/O ( libuv ) -> Thread-Pool -> Multi-Threaded-Async

8
serkan

JavaScript ist Singlethreading, ebenso das Ereignismodell. Der Knotenstapel ist jedoch kein Einzelthread.

Knoten verwendet die V8-Engine für Parallelität.

0