Maison  >  Article  >  interface Web  >  child_process implémente le multi-processus dans Node.js_node.js

child_process implémente le multi-processus dans Node.js_node.js

WBOY
WBOYoriginal
2016-05-16 16:16:051645parcourir

Copier le code Le code est le suivant :

var http = require('http');
fonction fib (n) {
Si (n < 2) {
Retour 1 ;
} autre {
Retourner fib(n - 2) fib(n - 1);
>
>
var serveur = http.createServer (fonction (req, res) {
var num = parseInt(req.url.substring(1), 10);
res.writeHead(200);
res.end(fib(num) "n");
});
serveur.écouter(8000);

L'exemple ci-dessus fournit un service de calcul de séquence de Fibonacci. Étant donné que ce calcul prend beaucoup de temps et est monothread, lorsqu'il y a plusieurs requêtes en même temps, une seule peut être traitée par child_process. fork() Cette question

Voici un exemple tiré du site officiel, grâce auquel vous pourrez mieux comprendre la fonction de fork()

Copier le code Le code est le suivant :

var cp = require('child_process');
var n = cp.fork(__dirname '/sub.js');
n.on('message', fonction(m) {
console.log('PARENT a reçu un message :', m);
});
n.send({ bonjour : 'monde' });

Le résultat de l'exécution de l'extrait de code ci-dessus :

Copier le code Le code est le suivant :

PARENT a reçu un message : { foo: 'bar' }
L'ENFANT a reçu un message : { bonjour : 'monde' }

Le contenu de sub.js est le suivant :

Copier le code Le code est le suivant :

process.on('message', function(m) {
console.log('ENFANT a reçu un message :', m);
});
process.send({ foo: 'bar' });

Dans le processus enfant, l'objet processus a une méthode send(), et il publiera un objet message à chaque fois qu'il recevra un message

Ce qui est un peu déroutant, c'est que le message envoyé par child.send() est reçu par la méthode process.on(), et le message envoyé par la méthode process.send() est reçu par child.on(). méthode

En nous référant à cet exemple, nous pouvons améliorer le premier service qui fournit des données de Fibonacci afin que chaque requête ait un nouveau processus distinct à gérer

Copier le code Le code est le suivant :

var http = require('http');
var cp = require('child_process');
var serveur = http.createServer(function(req, res) {
var child = cp.fork(__dirname '/fibonacci-calc.js');//Chaque requête génère un nouveau processus enfant
enfant.on('message', fonction(m) {
          res.end(m.result 'n');
});
var input = parseInt(req.url.substring(1));
enfant.send({input : input});
});
serveur.écouter(8000);

fibonacci-calc.js

Copier le code Le code est le suivant :

fonction fib(n) {
Si (n < 2) {
Retour 1 ;
} autre {
Retourner fib(n - 2) fib(n - 1);
>
>
process.on('message', function(m) {
Process.send({result: fib(m.input)});
});

Après avoir démarré le service, visitez http://localhost:8080/9 pour calculer la valeur de la séquence de Fibonacci de 9

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

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