以前マルチプロセスに関する章を読んだときに、プロセスモジュールを書いているときにも言及したことがたくさんありました。今日の午後、昼休みから起きて落ち着いて読みました。注意深く読んでみると、理解するのはそれほど難しくないことがわかりました。そのため、次の記事では、node.js を使用して子プロセスを作成する方法に関する関連情報を主に紹介します。必要な友人は参照してください。
前書き
Node 自体は単一プロセスであり、マルチコア CPU 上の単一プロセスのリソースの無駄を解決するためにドライバー モードを使用します。複数の子プロセスを作成します。
Node.js はシングルスレッドなので、マルチプロセッサ マシンにとっては無駄です。どのように使用できますか?そこで、child_process モジュールが登場しました。 child_process モジュールは、他のプロセスを生成、フォークし、作業を実行できます。
child_process モジュールは、親プロセスから子プロセスへのアクセスの表現として使用できる新しいクラス ChildProcess を提供します。 Process モジュールも ChildProcess オブジェクトです。親モジュールからプロセスにアクセスする場合、それは親の ChildProcess オブジェクトです。子プロセスからプロセスにアクセスする場合、それは ChildProcess オブジェクトです。オブジェクトを理解することは、イベント、メソッド、プロパティにすぎません。 ChildProcess についても同様です。
各子プロセスには常に、child.stdin、child.stdout、child.stderr の 3 つのストリーム オブジェクトがあります。これらは、親プロセスの stdio ストリームを共有する場合があります。
ここではまず、child_processモジュールのexec、spawn、forkの3つのメソッドを使って子プロセスを操作する方法を紹介します。
node-childProcessファイルを作成し、その中にnode-childPro.jsファイルを作成します。
1 行のコードは次のとおりです:
console.log("进程 " + process.argv[2] + " 执行。" ); //换成下面的查看process.argv //console.log("进程 " + process.argv + " 执行。" );
exec() メソッドnode-childProcess ファイル内に新しい node-childPro-exec.js ファイルを作成します。コードは次のとおりです。
ターミナル実行コードの結果は次のとおりです:const fs = require('fs'); const child_process = require('child_process'); for (var i = 0; i < 3; i++) { //这里有空格请注意。分别代表node路径 node-childPro.js路径 i第几个进程。 node-childPro.js中的process.argv可以获取这些信息值 var childProcess = child_process.exec('node node-childPro.js '+i, // 回调函数 子进程的输出以回调函数参数的形式返回 function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: ' + error.code); console.log('Signal received: ' + error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); childProcess.on('exit', function (code) { console.log('子进程已退出,退出码 ' + code); }); }
node-childProcess ファイル内に新しいノード-childPro-spawn.js を作成します。コードは次のとおりです:
G:\node\node-childProcess> node node-childPro-exec.js 子进程已退出,退出码 0 stdout: 进程 0 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 1 执行。 stderr: 子进程已退出,退出码 0 stdout: 进程 2 执行。 stderr:
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var childProcess = child_process.spawn('node', ['node-childPro-spawn.js', i]); childProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); childProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); childProcess.on('close', function (code) { console.log('子进程已退出,退出码 '+code); }); }
次のようなコードを使用して、node-childProcess ファイルに新しい node-childPro-fork.js を作成します。実行コードの結果は次のとおりです:
G:\node\node-childProcess> node node-childPro-spawn.js stdout: 进程 0 执行。 子进程已退出,退出码 0 stdout: 进程 1 执行。 stdout: 进程 2 执行。 子进程已退出,退出码 0 子进程已退出,退出码 0
1.exec この関数は、シェルコマンドの解析を追加し、複雑なコマンドを直接埋め込むことができます。関数はサブプロセスの出力をキャッシュし、コールバック関数パラメータの形式でサブプロセスの出力を返します。 3. spawn が子スレッドの実行を開始した後、子プロセスからメイン プロセスにデータを継続的に返し始めます。 (「システム監視」などのアプリケーションシナリオ) 4. spawn はコールバック関数をサポートしていません。ストリームを介してメインプロセスにデータを送信することで、複数のプロセス間のデータ交換を実現します。 ) は spawn() の特殊なケースであり、ノード プロセスを派生するために使用されます。通常の ChildProcess インスタンスのすべてのメソッドに加えて、返されるオブジェクトには組み込みの通信チャネルもあります。
上記は私があなたのためにまとめたものです。 関連記事:vue-cliでコンポーネント通信を実装する方法
angularを使用してMessageコンポーネントを記述する
EasyUIを使用してJsonデータソースをバインドする方法
以上がNode.js を使用して子プロセスを作成する方法 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。