English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

NodeJS tutoriel de base

NodeJS Express.js

NodeJS tampon & URL;

NodeJS MySql

NodeJS MongoDB

NodeJS fichier (FS)

Autres NodeJS

Multiprocessus de Node.js

Nous savons tous que Node.js fonctionne en mode mono-threadé, mais il utilise l'événement pour gérer la concurrence, ce qui nous permet de créer plusieurs processus enfants sur un système CPU multicœur, améliorant ainsi les performances.

Chaque processus enfant est toujours accompagné de trois objets flux : child.stdin, child.stdout et child.stderr. Ils peuvent partager les flux stdio du processus parent ou être des objets flux indépendants et redirigés.

Node fournit le module child_process pour créer des processus enfants, les méthodes incluent :

  • exec - child_process.exec exécute une commande en utilisant un processus fils, stocke la sortie du processus fils et retourne la sortie du processus fils sous forme de paramètres de fonction de rappel.

  • spawn - child_process.spawn crée un nouveau processus avec des arguments de ligne de commande spécifiés.

  • fork - child_process.fork est une forme spéciale de spawn() utilisée pour exécuter des modules dans les processus fils, comme fork('./son.js') est une forme spéciale de spawn() utilisée pour exécuter des modules dans les processus fils, comme fork('./son.js') est équivalent à spawn('node', ['.',

Méthode exec()

child_process.exec exécute une commande en utilisant un processus fils, stocke la sortie du processus fils et retourne la sortie du processus fils sous forme de paramètres de fonction de rappel.

La syntaxe est indiquée comme suit :

child_process.exec(command[, options], callback)

child_process.fork(modulePath[, args][, options])

Paramètres

command : chaîne, commande à exécuter, les paramètres sont séparés par des espaces

options : objet, peut être :

  • cwd, chaîne, répertoire de travail du processus fils

  • env, objet, paires de variables d'environnement

  • encoding, chaîne, codage de caractères (par défaut : 'utf8de ')

  • shell, chaîne, Shell à exécuter la commande (par défaut : dans UNIX de/bin/sh, dans Windows pour cmd.exe, le Shell doit pouvoir le reconnaître -l'option c dans UNIX, ou /s /c dans Windows. Dans Windows, l'analyse de la ligne de commande doit être compatible avec cmd.exe)

  • timeout, nombre, temps d'expiration (par défaut : 0)

  • maxBuffer, nombre, le plus grand tampon autorisé dans stdout ou stderr (binaire), si il dépasse, le processus fils sera tué (par défaut : 200*1024)

  • killSignal, chaîne, signal de fin (par défaut : 'SIGTERM')

  • uid, nombre, définit l'ID du processus utilisateur.

  • gid, nombre, définit l'ID du groupe de processus.

callback :La fonction de rappel, contient trois paramètres error, stdout et stderr.

La méthode exec() retourne le plus grand tampon, attend la fin du processus et retourne le contenu du tampon en une seule fois.

Exemple en ligne

Créons deux fichiers js, support.js et master.js.

Code du fichier support.js :

console.log("Processus ") + process.argv[2] + " Exécuter. " );

Code du fichier master.js :

const fs = require('fs');
const child_process = require('child_process');
 
for(var i=0; i<3; i++) {
    var processusTravail = child_process.exec('node support.js ')+i, fonction (erreur, stdout, stderr) {
        if (error) {}}
            console.log(error.stack);
            console.log('Code d'erreur : ')+error.code);
            console.log('Signal reçu : ')+error.signal);
        }
        console.log('stdout: ') + stdout);
        console.log('stderr: ') + stderr);
    });
 
    workerProcess.on('exit', function(code) {
        console.log('Le processus fils a quitté, code de sortie ')+code);
    });
}

Exécuter le code suivant, le résultat de la sortie est :

$ node master.js 
Le processus fils a quitté, code de sortie 0
stdout: processus 1 Exécuter.
stderr: 
Le processus fils a quitté, code de sortie 0
stdout: processus 0 en exécution.
stderr: 
Le processus fils a quitté, code de sortie 0
stdout: processus 2 Exécuter.
stderr:

méthode spawn()

child_process.spawn crée un nouveau processus avec les arguments de ligne de commande spécifiés, avec la syntaxe suivante :

child_process.spawn(command[, args][, options])

child_process.fork(modulePath[, args][, options])

Paramètres

command : commande à exécuter

args : Array tableau de paramètres de chaîne de caractères

options Object

  • cwd String Dossier de travail du processus fils

  • env Object Paire de variables d'environnement

  • stdio Array|String configuration stdio du sous-processus

  • detached Boolean ce sous-processus deviendra le leader du groupe de processus

  • uid Number Définir l'ID du processus utilisateur

  • gid Number Définir l'ID du groupe de processus

support.js fichier code :

Exemple en ligne

Créons deux fichiers js, support.js et master.js.

master.js fichier code :

console.log("Processus ") + process.argv[2] + " Exécuter. " );

code); }

const fs = require('fs'); const child_process = require('child_process'); 
for(var i=0; i<3; i++) {
   var workerProcess = child_process.spawn('node', ['support.js', i]); 
   workerProcess.stdout.on('data', function(data) {
      console.log('stdout: ') + data); }); 
   workerProcess.stderr.on('data', function(data) {
      console.log('stderr: ') + data); }); 
   workerProcess.on('close', function(code) {
      console.log('Le processus fils a quitté, code de sortie ')+code); });}

Exécuter le code suivant, le résultat de la sortie est :

$ node master.js stdout: processus 0 en exécution.
Le processus fils a quitté, code de sortie 0
stdout: processus 1 Exécuter.
Le processus fils a quitté, code de sortie 0
stdout: processus 2 Exécuter.
Le processus fils a quitté, code de sortie 0

méthode fork

child_process.fork est une forme spéciale de spawn(), utilisée pour créer des processus, avec la syntaxe suivante :

child_process.fork(modulePath[, args][, options])

child_process.fork(modulePath[, args][, options])

Paramètres

Explication des paramètres :modulePath

: String, module à exécuter dans le processus filsargs

: Array Tableau de paramètres de chaîne:Object

  • cwd String Dossier de travail du processus fils

  • env Object Paire de variables d'environnement

  • execPath String Créer l'exécutable du processus fils

  • execArgv Array Tableau de paramètres de chaîne de l'exécutable du processus fils (par défaut : process.execArgv)

  • silent Boolean Si true, stdin, stdout et stderr du processus fils seront liés au processus parent, sinon, ils hériteront du processus parent. (par défaut : false)

  • uid Number Définir l'ID du processus utilisateur

  • gid Number Définir l'ID du groupe de processus

L'objet retourné possède non seulement toutes les méthodes de l'exemple ChildProcess, mais aussi un canal de communication intégré.

Exemple en ligne

Créons deux fichiers js, support.js et master.js.

Code du fichier support.js :

console.log("Processus ") + process.argv[2] + " Exécuter. " );

Code du fichier master.js :

const fs = require('fs'); const child_process = require('child_process'); 
for(var i=0; i<3; i++) {
   var worker_process = child_process.fork("support.js", [i]);    
 
   worker_process.on('close', function(code) {
      console.log('Le processus fils a quitté, code de sortie ') + code); });}

Exécuter le code suivant, le résultat de la sortie est :

$ node master.js 
Processus 0 exécuter.
Le processus fils a quitté, code de sortie 0
Processus 1 Exécuter.
Le processus fils a quitté, code de sortie 0
Processus 2 Exécuter.
Le processus fils a quitté, code de sortie 0