2016-04-20 10 views
0

Führt Node.js immer nur einen Kontext oder einen einzelnen Codebefehl aus, unabhängig vom Kontext?Führt node.js zu der Zeit nur einen Kontext aus?

Im Fall von zwei nicht blockierenden IO-Operationen sind sie beendet und ihre Callbacks werden aufgerufen, werden sie gleichzeitig ausgeführt oder führt Node.js den ersten Callback vollständig aus und führt danach den zweiten aus?

Ist es besser, die Callback-Funktionen einfacher und kürzer zu machen? Wird das die Parallelität verbessern?

+0

Jede Abbiegung der Ereignisschleife ist vollständig abgeschlossen. Es wird keine Callbacks zwischen willkürlichen Anweisungen geben. – Bergi

+0

aufgerufene Callbacks bei Abschluss von IO-Operationen werden sequenziell und nicht gleichzeitig ausgeführt. – Nivesh

Antwort

1

node.js ist eine EDA (Event Driven Architecture) und ist als solche für den Anwendungscode nicht gleichzeitig gültig. Dies bedeutet nicht, dass es keine gleichzeitigen Threads gibt. Tatsächlich wird die E/A bei gleichzeitigen Threads ausgeführt, aber ihre Daten werden in eine Warteschlange gestellt, die die E/A-Nachrichten inhärent serialisiert. Auf diese Weise wird Parallelismus serialisiert. Es gibt keine Möglichkeit, die Parallelität in Ihrem Anwendungscode zu bemerken. Denken Sie darüber nach, als ob Sie nur einen Thread haben und Sie die Codeausführung nicht "überspringen" oder "verschachteln" können.

Wenn Sie eine Flut von I/O-Nachrichten schneller Verarbeitung erfahren wird sicherlich helfen. Schnelle Callback-Funktionen bedeuten, dass Sie in kürzerer Zeit mehr verarbeiten können, um Engpässe in der E/A-Warteschlange zu vermeiden. Deshalb solltest du niemals blocken.

+0

Worst-Case-Szenario ist das OP muss einen FIFO-Puffer hinzufügen, um abgeschlossene Threads, sagen wir 8 Ebenen tief oder mehr. Jetzt haben Sie einen "Burst" -Modus, um viele Daten in Paketen zu verschieben. Strafe ist der Downstream-Code muss in der Lage sein, einen Ansturm von Daten ohne Blockierung zu analysieren/behandeln. Vorteil ist, dass die Parsing-Zeit eine parallele Verarbeitung von Daten ermöglicht, die NICHT co-abhängig sind. – Sparky256