node.jsを利用して、どうやってサブプロセスを作成しますか?


前言
node自体は単一プロセスであり、駆動モードを使って同時処理を行い、多核cpuにおける単一プロセスの資源浪費を解決するために、nodeはclusterとchild_を提供している。processモジュールは、複数のサブプロセスを作成します。
Node.jsはシングルスレッドですが、現在は多くのプロセッサが普及しているマシンはもったいないです。どうやって利用できますか?そしてちゅちゃんprocessモジュールが現れました。ちどり_processモジュールは、他のプロセスにおいて、派生して、作業を実行することができる。
ちどり_processモジュールは、親プロセスからサブプロセスにアクセスするための表示形式として、ChildProcessの新しいクラスを提供する。ProcessモジュールもChildProcessオブジェクトです。親モジュールからプロcessにアクセスすると、親ChildProcessのオブジェクトです。子プロセスからProcessにアクセスするときは、ChildProcessのオブジェクトです。
一つのオブジェクトには、イベント、方法、属性がないことを知る。ChildProcessも同じです。
各サブプロセスは、常に三つのストリームオブジェクトを有する。child.stdin、child.stdout、child.stder。彼らは親プロセスの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-exc.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);
 });
}
端末実行コードの結果は以下の通りです。

G:
ode
ode-childProcess> node node-childPro-exec.js , 0 stdout: 0 。 stderr: , 0 stdout: 1 。 stderr: , 0 stdout: 2 。 stderr:
spawn()の方法
node-childProcessファイルにnode-childPro-spawn.jsを新規作成します。コードは以下の通りです。

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);
 });
}
端末実行コードの結果は以下の通りです。

G:
ode
ode-childProcess> node node-childPro-spawn.js stdout: 0 。 , 0 stdout: 1 。 stdout: 2 。 , 0 , 0
fork()メソッド
node-childProcessファイルにnode-childPro-fork.jsを新規作成します。コードは以下の通りです。

const fs = require('fs');
const child_process = require('child_process');
 for(var i=0; i<3; i++) {
 var childProcess = child_process.fork("node-childPro.js", [i]); 
 childProcess.on('close', function (code) {
 console.log('      ,    ' + code);
 });
}
端末実行コードの結果は以下の通りです。

G:
ode
ode-childProcess> node node-childPro-fork.js 0 。 1 。 , 0 2 。 , 0 , 0
exec、spawn、forkについて
     1.exec関数はspawnに対する友好パッケージで、Shellコマンドの解析を追加して、直接に複雑なコマンドを埋め込むことができます。
     2.exec関数は、サブルーチンの出力をキャッシュし、サブルーチンの出力をコールバック関数パラメータとして返します。
     3.spawnは、サブスレッドが開始されると、サブプロセスからメインプロセスに戻る(アプリケーションシーンは「システムモニタ」のような)。
     4.spawnはcalback関数がサポートされていません。これはフローによってメインプロセスにデータを送るので、プロセス間のデータ交換を実現します。
     5.fork()はspawn()の特別なシナリオであり、派生Nodeプロセスに用いられる。通常のChildProcessの例が有するすべての方法に加えて、戻るオブジェクトは、内部に構築された通信チャネルを有する。
ダウンロード住所:https://gitee.com/wangFengJ/node/tree/master/node-childProcess
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考となる学習価値を持っています。質問があれば、メッセージを書いて交流してください。ありがとうございます。