4 Stimmen

Verwendet die benutzerdefinierte Callback-Funktion den Thread-Pool in Node.js?

Diese Frage dient dazu zu verstehen, wie die Ereignisschleife den Thread-Pool aufruft, um Aufgaben zu verarbeiten. Sagen wir, Ich möchte eine Funktion erstellen (um kleine Aufgaben zu verarbeiten), ohne E / A-Operationen, ich möchte, dass sie mithilfe einer Rückruffunktion verarbeitet wird, damit sie den Thread-Pool aufrufen kann und die Aufgabe parallel zum Hauptthread verarbeiten kann, und das Ergebnis im Rückruf nach Abschluss zurückgeben. Ich habe verstanden, dass dies durch Erstellen von Kindprozessen (Gabeln usw.) erfolgen kann, aber ich bin etwas verwirrt und möchte verstehen, wie genau ein Prozess gleichzeitig in einem einzelnen Thread in der Node in E / A-Operationen ausgeführt wird und nicht in benutzerdefinierten Operationen. Was genau passiert in der Ereignisschleife, werden alle Ereignisse an den Thread-Pool übergeben oder wie erkennt er, ob es sich um eine E / A-Operation handelt??

Ich bin neu bei Node.js und völlig verwirrt. Hilfe wäre sehr geschätzt :)

0voto

Oleg Punkte 22200

„Node.js verwaltet eigene Threads für I/O“ mithilfe von libuv für Operationen, die das Netzwerk, das Dateisystem usw. betreffen. libuv erstellt im Wesentlichen einen Thread-Pool für I/O, der je nach Plattform in der Größe variiert. Die V8-Ereignisschleife ist ein separater Thread, der Ereignisse in der Warteschlange verarbeitet. Diese Ereignisse entsprechen einer JavaScript-Funktion, die mit den Ereigindaten ausgeführt wird. So wird asynchrones I/O von Node.js gehandhabt.

Quelle: http://www.wintellect.com/blogs/dbanister/stop-fighting-node.js-in-the-enterprise

Daher wird jede I/O-Operation außerhalb des V8-Ereignisschleifenthreads ausgeführt, weshalb sie gleichzeitig ausgeführt wird.

I/O-Operationen laufen effizient ab, da, wie Sie erwähnt haben, ein Thread-Pool verwendet wird - eine Gruppe von Threads, die „auf“ eingehende Aufgaben von der V8-Ereignisschleife warten, sie ausführen und Daten an JavaScript-Callback-Funktionen zurückgeben.

-1voto

Maxim Punkte 7078

Wie bereits erwähnt, ist die Node-Laufzeitumgebung single-threaded. Node eignet sich gut für IO-bound Operationen. Für CPU-gebundene Aufgaben ist es weniger zu empfehlen, da es den Ereignisloop von Node blockieren wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X