Wenn ich richtig verstehe, blockiert Node JS nicht ... anstatt auf eine Antwort von einer Datenbank oder einem anderen Prozess zu warten, wurde es zu etwas anderem weitergeleitet und später erneut überprüft.
Es ist auch Single-Threaded.
Dies bedeutet also, dass ein bestimmter Node JS-Prozess einen einzelnen CPU-Kern vollständig und effizient nutzen kann, jedoch keinen anderen Kern auf dem Computer verwendet, da in nie mehr als ein Kern gleichzeitig verwendet wird.
Dies bedeutet natürlich, dass die anderen CPUs weiterhin von anderen Prozessen für Dinge wie SQL-Datenbanken oder andere absichtlich getrennte CPU-schwere Unterprogramme verwendet werden können, solange sie ein separater Prozess sind.
Auch für den Fall, dass der Node JS-Prozess eine Endlosschleife oder eine Funktion mit langer Laufzeit hat, ist dieser Prozess in keiner Weise mehr nützlich, bis die Endlosschleife oder die Funktion mit langer Laufzeit gestoppt (oder der gesamte Prozess beendet) wird.
Ist das alles richtig? Bin ich in meinem Verständnis richtig?
quelle
Antworten:
Ziemlich richtig, ja. Der node.js-Server verfügt über einen internen Thread-Pool, sodass er Blockierungsvorgänge ausführen und den Hauptthread mit einem Rückruf oder Ereignis benachrichtigen kann, wenn die Dinge abgeschlossen sind.
Daher stelle ich mir vor, dass ein anderer Kern für den Thread-Pool nur eingeschränkt verwendet wird. Wenn Sie beispielsweise ein nicht blockierendes Dateisystem lesen, wird dies wahrscheinlich implementiert, indem ein Thread aus dem Thread-Pool angewiesen wird, einen Lesevorgang durchzuführen und einen Rückruf festzulegen, wenn Dies geschieht, was bedeutet, dass der Lesevorgang möglicherweise auf einem anderen Thread / Kern stattfindet, während das Hauptprogramm node.js etwas anderes ausführt.
Aus der Sicht von node.js ist es jedoch ein Single-Thread und verwendet nicht direkt mehr als einen Kern.
quelle
Ja, ich würde sagen, dass Ihr Verständnis völlig richtig ist. Dieser Artikel ( archiviert ) erklärt die Gründe für dieses Design recht gut. Dies ist wahrscheinlich der wichtigste Absatz:
quelle
Selbst wenn dies ein alter Thread ist, dachte ich, dass ich mit einer Idee teilen würde, wie man mehr als einen Kern in der Node.JS-App nutzt. Wie Nuray Altin erwähnt hat - JXcore kann das.
Einfaches Beispiel:
Standardmäßig gibt es zwei Threads (Sie können es mit ändern
jxcore.tasks.setThreadCount()
)Natürlich können Sie mit Aufgaben noch viel mehr tun. Die Dokumente sind hier .
Einige Artikel zu diesem Thema:
quelle
Seit dieser Frage vor fast 2 Jahren gestellt. Die Dinge werden anders oder es gibt alternative Ansätze für Multithreading-Probleme auf Node.JS
Laut dem folgenden Blog-Beitrag können einige mithilfe der eingehenden Erweiterung 'task' direkt von anderen verfügbaren Kernen profitieren.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
quelle
Node.js ist eine Single-Thread-Anwendung, kann jedoch die Parallelität über das Konzept von Ereignissen und Rückrufen unterstützen. Hier ist ein Video von Philip Roberts, das erklärt, wie die Ereignisschleifen in Javascript funktionieren.
Klicken Sie hier, um das Video zu sehen
(Anstelle von WebAPIs gibt es in Node.js C ++ - APIs.)
quelle