Spawn ist ein Befehl zum Ausführen von Systembefehlen. Wenn Sie spawn ausführen, senden Sie ihm einen Systembefehl, der in einem eigenen Prozess ausgeführt wird, aber keinen weiteren Code in Ihrem Knotenprozess ausführt. Sie können Listener für den Prozess hinzufügen, den Sie erzeugt haben, damit Ihr Code mit dem erzeugten Prozess interagieren kann, aber keine neue V8-Instanz erstellt wird (es sei denn, Ihr Befehl ist natürlich ein anderer Knotenbefehl, aber in diesem Fall sollten Sie fork verwenden!) Und Auf dem Prozessor ist nur eine Kopie Ihres Knotenmoduls aktiv.
Fork ist eine spezielle Instanz von Spawn, die eine neue Instanz der V8-Engine ausführt. Das heißt, Sie können im Wesentlichen mehrere Worker erstellen, die auf genau derselben Node-Codebasis oder möglicherweise einem anderen Modul für eine bestimmte Aufgabe ausgeführt werden. Dies ist am nützlichsten zum Erstellen eines Worker-Pools. Während das asynchrone Ereignismodell des Knotens die recht effiziente Verwendung eines einzelnen Kerns einer Maschine ermöglicht, kann ein Knotenprozess keine Mehrkernmaschinen verwenden. Der einfachste Weg, dies zu erreichen, besteht darin, mehrere Kopien desselben Programms auf einem einzigen Prozessor auszuführen.
Eine gute Faustregel ist ein bis zwei Knotenprozesse pro Kern, möglicherweise mehr für Maschinen mit einem guten RAM-Takt / CPU-Takt-Verhältnis oder für Knotenprozesse, die viel E / A und wenig CPU-Arbeit erfordern, um die Ausfallzeit des Ereignisses zu minimieren Schleife wartet auf neue Ereignisse. Der letztere Vorschlag ist jedoch eine Mikrooptimierung und würde ein sorgfältiges Benchmarking erfordern, um sicherzustellen, dass Ihre Situation den Anforderungen für viele Prozesse / Kern entspricht. Sie können die Leistung tatsächlich verringern, indem Sie zu viele Mitarbeiter für Ihre Maschine / Ihr Szenario erzeugen.
Letztendlich können Sie Spawn auf die oben beschriebene Weise verwenden, indem Sie Spawn einen Node-Befehl senden. Dies wäre jedoch albern, da Fork einige Schritte unternimmt, um den Prozess der Erstellung von V8-Instanzen zu optimieren. Nur um klar zu machen, dass Spawn letztendlich Gabel umfasst. Die Gabel ist für diesen speziellen und sehr nützlichen Anwendungsfall einfach optimal.
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
var child = require('child_process').fork('child.js');
zum Beispiel in meiner Haupt-App verwende, werden jetzt 2 separate Kerne ausgeführt. Wenn ich eine schwere for-Schleife in child.js (Prozess) ausführen würde, würde ich im Wesentlichen mehr Kerne verwenden, um child.js mit Strom zu versorgen, oder? Würde sich diese CPU-Nutzung jedoch auf meinen Haupt-App-Kern auswirken?