Maison >interface Web >js tutoriel >Apprenez à utiliser node.js pour créer un processus enfant
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 + " 执行。" );
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('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); }); }
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:
méthode spawn()
Créez un nouveau node-childPro-spawn.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++) { 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); }); }
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
Méthode fork()
Créez un nouveau node-childPro-fork.js dans le node-childProcess fichier, avec le code suivant :
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); }); }
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 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")
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!