Maison  >  Article  >  interface Web  >  Comment créer un processus enfant à l'aide de node.js (tutoriel détaillé)

Comment créer un processus enfant à l'aide de node.js (tutoriel détaillé)

亚连
亚连original
2018-06-21 17:33:512720parcourir

Quand j'ai lu le chapitre sur le multi-processus auparavant, j'ai trouvé qu'il y avait beaucoup de choses à ce sujet. Je l'ai également mentionné lorsque j'écrivais le module Processus, je me suis réveillé de ma pause déjeuner cet après-midi et je me suis calmé. Je l'ai lu attentivement et j'ai constaté qu'il n'était pas trop difficile à comprendre. Ainsi, l'article suivant vous présente principalement les informations pertinentes sur la façon de créer un processus enfant à l'aide de node.js. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Le nœud lui-même est un processus unique et utilise le mode pilote pour gérer la concurrence afin de résoudre le gaspillage de ressources d'un seul. processus sur un processeur multicœur, Node fournit les modules cluster et child_process pour créer plusieurs processus enfants.

Node.js est monothread, ce qui est un gaspillage pour les machines multiprocesseurs. Comment peut-il être utilisé ? Le module child_process est donc apparu. Le module child_process peut générer, créer et effectuer des travaux sur d'autres processus.

Le module child_process fournit une nouvelle classe ChildProcess, qui peut être utilisée comme représentation de l'accès à un processus enfant à partir d'un processus parent. Le module Process est également un objet ChildProcess. Lorsque vous accédez au processus à partir du module parent, il s'agit de l'objet ChildProcess parent. Lorsque vous accédez à Process à partir du processus enfant, il s'agit de l'objet ChildProcess

Comprendre un objet n'est rien de plus que des événements, des méthodes et des propriétés. Il en va de même pour ChildProcess.

Chaque processus enfant a toujours trois objets de flux : child.stdin, child.stdout, child.stderr. Ils peuvent partager le flux stdio du processus parent.

Ici, nous présentons d'abord comment faire fonctionner le processus enfant en utilisant les trois méthodes exec, spawn et fork dans le module child_process.

Créez le fichier node-childProcess et créez-y le fichier node-childPro.js.

Une ligne de code est la suivante :

console.log("进程 " + process.argv[2] + " 执行。" );
//换成下面的查看process.argv
//console.log("进程 " + process.argv + " 执行。" );

Méthode exec()

Créez-en une nouvelle dans le fichier node-childProcess node-childPro-exec.js, le code est le suivant :

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(&#39;node node-childPro.js &#39;+i,
 // 回调函数 子进程的输出以回调函数参数的形式返回
 function (error, stdout, stderr) {
  if (error) {
  console.log(error.stack);
  console.log(&#39;Error code: &#39; + error.code);
  console.log(&#39;Signal received: &#39; + error.signal);
  }
  console.log(&#39;stdout: &#39; + stdout);
  console.log(&#39;stderr: &#39; + stderr);
 });
 childProcess.on(&#39;exit&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39; + code);
 });
}

Le résultat du code d'exécution du terminal est le suivant :

G:\node\node-childProcess> node node-childPro-exec.js
子进程已退出,退出码 0
stdout: 进程 0 执行。
stderr:
子进程已退出,退出码 0
stdout: 进程 1 执行。
stderr:
子进程已退出,退出码 0
stdout: 进程 2 执行。
stderr:

Méthode spawn()

Créez un nouveau node-childPro-spawn.js dans le fichier node-childProcess, avec le code suivant :

const fs = require(&#39;fs&#39;);
const child_process = require(&#39;child_process&#39;);
 for(var i=0; i<3; i++) {
 var childProcess = child_process.spawn(&#39;node&#39;, [&#39;node-childPro-spawn.js&#39;, i]);  
 childProcess.stdout.on(&#39;data&#39;, function (data) {
 console.log(&#39;stdout: &#39; + data);
 });
childProcess.stderr.on(&#39;data&#39;, function (data) {
 console.log(&#39;stderr: &#39; + data);
 });
 childProcess.on(&#39;close&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39;+code);
 });
}

Le résultat de l'exécution du code sur le terminal est le suivant :

G:\node\node-childProcess> node node-childPro-spawn.js
stdout: 进程 0 执行。
子进程已退出,退出码 0
stdout: 进程 1 执行。
stdout: 进程 2 执行。
子进程已退出,退出码 0
子进程已退出,退出码 0

Méthode fork()

Créer un nouveau node-childPro -fork.js dans le fichier node-childProcess, avec le code comme suit :

const fs = require(&#39;fs&#39;);
const child_process = require(&#39;child_process&#39;);
 for(var i=0; i<3; i++) {
 var childProcess = child_process.fork("node-childPro.js", [i]); 
 childProcess.on(&#39;close&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39; + code);
 });
}

Les résultats du code d'exécution du terminal sont les suivants :

G:\node\node-childProcess> node node-childPro-fork.js
进程 0 执行。
进程 1 执行。
子进程已退出,退出码 0
进程 2 执行。
子进程已退出,退出码 0
子进程已退出,退出码 0

À propos de exec, spawn, fork

1. La fonction exec est une extension de spawn Une sorte d'encapsulation conviviale, en ajoutant l'analyse des commandes Shell, vous pouvez directement intégrer des commandes complexes

2. La fonction exec met en cache la sortie du sous-processus et renvoie la sortie du sous-processus sous la forme de paramètres de fonction de rappel

3. Une fois que le thread enfant commence à s'exécuter, le spawn commence à renvoie continuellement les données du processus enfant au processus principal (scénarios d'application tels que "surveillance du système")

4.spawn ne prend pas en charge la fonction de rappel, il transmet le flux Envoyer les données au processus principal, réalisant ainsi échange de données entre plusieurs processus

5. fork() est un cas particulier de spawn(), utilisé pour dériver les processus Node. En plus de toutes les méthodes d'une instance ChildProcess normale, l'objet renvoyé possède également des canaux de communication intégrés.

Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir.

Articles associés :

Comment implémenter la communication entre composants dans vue-cli

Utiliser angulaire pour écrire le composant Message

Comment lier une source de données Json à l'aide d'EasyUI

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn