NodeJS子プロセス:exec、fork、spawn
1070 ワード
Nodeの利点は、言語の処理速度にあり、その速度は非同期処理とイベント駆動のメカニズムに確立される.しかし、言語自体のシングルスレッド処理は速度を制限し、ハードウェア資源が十分な環境ではコンピュータの性能を十分に利用できない.列子を挙げます.サーバーの業務ロジックで、モジュールの複雑さが特に高い場合、処理に時間がかかります.スレッドが一つしかない場合、コード処理はブロックされます.Node開発チームもそれによって解決策を出しました.それはchild_です.processモジュールは、そのモジュールに4つの関数を提供します.exec、execFile、spawn、fork.これらの4つの関数のコア機能はすべてデリバティブプロセスであり、それらの間の異なる呼び出し形式と通信方式に違いがある.
Spawnは最も基本的な関数であり、他の3つのAPI機能はすべてspawn命令に基づいて実現される.この関数は三つのパラメータを受け入れています.一つ目は実行コマンド(e.g.node,ls,chmod)です.第二のパラメータは、命令実行後のすべてのパラメータを含むことができる配列です.3番目のパラメータはoptionオブジェクトです.ちどりなのでprocessはEventモジュールを継承していますので、親プロセスでサブプロセスの傍受ができます.stdoutによってプロセスのすべての出力を取得することができます.
execの呼び出し方法も似ていますが、execのプロセスはshellで生成され使用されています.
Spawnは最も基本的な関数であり、他の3つのAPI機能はすべてspawn命令に基づいて実現される.この関数は三つのパラメータを受け入れています.一つ目は実行コマンド(e.g.node,ls,chmod)です.第二のパラメータは、命令実行後のすべてのパラメータを含むことができる配列です.3番目のパラメータはoptionオブジェクトです.ちどりなのでprocessはEventモジュールを継承していますので、親プロセスでサブプロセスの傍受ができます.stdoutによってプロセスのすべての出力を取得することができます.
var spawn = require('child_process').spawn;
// Create a child process
var child = spawn('tail',
['-f', '/var/log/system.log']);
child.stdout.on('data', function(data){
console.log(data);
})
Forkの呼び出し方式はspawnと非常に似ています.違いはforkの親プロセスが子プロセスと通信できることです.サブプロセスのオブジェクト内でsend関数を呼び出すことで実現できますが、サブプロセスはproccess関数でメッセージイベントを傍受するだけで情報を得ることができます.execの呼び出し方法も似ていますが、execのプロセスはshellで生成され使用されています.