[解決済み] node.jsの子プロセス - spawnとforkの違い
質問
これは基本的な質問のように見えるかもしれませんが、私は任意のドキュメントを見つけることができませんでした。
node.jsのプロセスをforkするのとspawnするのでは何が違うのでしょうか?私はフォークがスポーニングの特殊なケースであると読んだことがありますが、それぞれを使用するための異なるユースケース/レペゼンションは何でしょうか?
どのように解決するのですか?
Spawnは、システムコマンドを実行するために設計されたコマンドです。 spawnを実行すると、それ自身のプロセスで実行されるシステムコマンドが送信されますが、あなたのノードプロセス内でそれ以降のコードが実行されることはありません。 しかし、新しいV8インスタンスは生成されず(もちろんコマンドが他のNodeコマンドでない限りですが、この場合はforkを使うべきです!)、プロセッサ上でアクティブになるのはノードモジュールの1つのコピーだけです。
Forkはspawnの特別なインスタンスで、V8エンジンの新しいインスタンスを実行します。 つまり、全く同じ Node コードベース、または特定のタスクのための異なるモジュールで動作する複数のワーカーを作成することができます。 これはワーカープールを作るのに最も便利です。 node の非同期イベントモデルはマシンのシングルコアをかなり効率的に使用できますが、node プロセスがマルチコアマシンを使用することはできません。 これを実現する最も簡単な方法は、1つのプロセッサで同じプログラムのコピーを複数実行することです。
RAMクロックとCPUクロックの比率が高いマシンでは、1コアあたり1~2ノードプロセス、またはI/Oが多くCPUワークが少ないノードプロセスでは、イベントループが新しいイベントを待つダウンタイムを最小限に抑えるために、それ以上のノードプロセスが推奨されます。 しかし、後者の提案はマイクロ最適化であり、多くのプロセス/コアの必要性に適した状況を確認するために慎重なベンチマークが必要でしょう。 あなたのマシンやシナリオに対してあまりに多くのワーカーを生成すると、実際にパフォーマンスが低下する可能性があります。
最終的には、Nodeコマンドをspawnに送ることで、上記のような方法でspawnを使用することができます。 なぜなら、forkはV8インスタンスを生成するプロセスを最適化するためにいくつかのことを行うからです。 最終的にspawnはforkを包含しているということを明確にしておくだけです。 forkはこの特定の、そして非常に便利なユースケースに最適なだけです。
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
関連
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsでPOSTデータを処理する方法は?
-
[解決済み] OPTIONSルートにCORSヘッダを追加しても、ブラウザが私のAPIにアクセスできないのはなぜですか?
-
[解決済み】fork()、vfork()、exec()、clone()の違いについて)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] ランタイム 'node' が PATH で見つからない - Visual Studio Code と Node.js
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。