2016-08-05 8 views
1

ノードjs forkは、新しいV8インスタンスを作成することを理解しています。これは、spawn関数とは異なります。 forkは、ノードjs(マルチコアマシン上)でマルチスレッドを使用できるため、親のパフォーマンスに影響を与えずに負荷の大きなスクリプトを実行する場合は、forkが最適ですスクリプト?ノードjsフォーク関数とスポークによるスレッディング

ありがとうございました。

答えて

2

スポーンは、システムコマンドを実行するために設計されたコマンドです。 spawnを実行すると、独自のプロセスで実行されるシステムコマンドが送信されますが、ノードプロセス内でそれ以上のコードは実行されません。生成されたプロセスのリスナーを追加して、コードが生成されたプロセスと対話できるようにしますが、新しいV8インスタンスは作成されません(もちろん、コマンドは別のNodeコマンドですが、この場合forkを使用する必要があります)。ノードモジュールの1つのコピーだけがプロセッサ上でアクティブです。

フォークは、スポーンの特別なインスタンスで、V8エンジンの新しいインスタンスを実行します。つまり、基本的に、正確に同じNode Codeベースで実行される複数のワーカー、または特定のタスクの異なるモジュールを作成することができます。これは、ワーカー・プールを作成する場合に最も便利です。ノード非同期イベントモデルは、マシンの単一のコアをかなり効率的に使用することを可能にするが、ノードプロセスがマルチコアマシンを使用することを可能にしない。これを達成する最も簡単な方法は、同じプログラムの複数のコピーを1つのプロセッサで実行することです。

1つのコアあたり1〜2つのノードプロセスがあります。おそらくラムクロック/ CPUクロック比の良いマシンや、I/OやCPU動作の重いノードプロセスでは、イベント・ループが新しいイベントを待っているダウン・タイム。しかし、後者の提案はマイクロ最適化であり、あなたの状況が多くのプロセス/コアの必要性に合うように注意深いベンチマークが必要です。あなたのマシン/シナリオにあまりに多くの労働者を出産させることで、実際にパフォーマンスを低下させることができます。

最終的には、上記のように、スポーンをNodeコマンドを使って送信することができます。しかし、これは愚かなことです。フォークはV8インスタンスの作成プロセスを最適化するためにいくつかのことを行うためです。それを明らかにするだけで、最終的にスポークはフォークを取り囲んでいます。フォークは、この特定の非常に便利なユースケースに最適です。 https://stackoverflow.com/a/17861879/2148827

- から撮影

http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

関連する問題