Maison > interface Web > js tutoriel > le corps du texte

Apprenez à utiliser node.js pour créer un processus enfant

小云云
Libérer: 2017-12-11 09:35:58
original
1648 Les gens l'ont consulté

Il y a beaucoup de connaissances liées au multi-processus, et cela a également été mentionné lors de l'écriture du module Processus, mais j'ai trouvé que ce n'est pas trop difficile à comprendre. Cet article vous présente principalement les informations pertinentes sur la façon de créer un processus enfant à l'aide de node.js. Les amis qui en ont besoin peuvent s'y référer. J'espère qu'il pourra vous aider.

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 à Process depuis le module parent, il s'agit de l'objet ChildProcess parent. Lorsque vous accédez à Process depuis le 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 + " 执行。" );
Copier après la connexion


Méthode exec( )

Créez un nouveau fichier node-childPro-exec.js dans le fichier node-childProcess, avec le code 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);
 });
}
Copier après la connexion


Le résultat de l'exécution du code sur le 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:
Copier après la connexion


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);
 });
}
Copier après la connexion


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


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


Méthode fork()

Créez un nouveau node-childPro-fork.js dans le node-childProcess fichier, 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.fork("node-childPro.js", [i]); 
 childProcess.on(&#39;close&#39;, function (code) {
 console.log(&#39;子进程已退出,退出码 &#39; + code);
 });
}
Copier après la connexion


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
Copier après la connexion


À propos de exec, spawn, fork

1. La fonction exec est une encapsulation conviviale de spawn, ajoutant l'analyse des commandes Shell et pouvant 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 dans le forme de paramètres de fonction de rappel

3. Spawn commence à envoyer des données en continu après le début de l'exécution du thread enfant Retour du processus enfant au processus principal (scénario d'application tel que "surveillance du système")

4.spawn ne prend pas en charge la fonction de rappel. Il envoie des données au processus principal via un flux, réalisant ainsi l'échange de données entre plusieurs processus


5. fork() est un cas particulier de spawn(), utilisé pour générer des 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.

L'avez-vous déjà appris ? Dépêchez-vous et essayez-le.

Recommandations associées :

PHP et Node.js

Une brève introduction au contrôle de flux asynchrone dans Node.js

Connaissance connexe de Node.JS

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal