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

Child_process implémente plusieurs processus dans Node.js

高洛峰
Libérer: 2016-12-26 09:14:54
original
1336 Les gens l'ont consulté

var http = require('http');
function fib (n) {
    if (n < 2) {
        return 1;
    } else {
        return fib(n - 2) + fib(n - 1);
    }
}
var server = http.createServer(function (req, res) {
    var num = parseInt(req.url.substring(1), 10);
    res.writeHead(200);
    res.end(fib(num) + "\n");
});
server.listen(8000);
Copier après la connexion

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 via child_process.fork(. ) Ce problème peut être résolu

Voici un exemple tiré du site officiel, à travers lequel vous pouvez mieux comprendre la fonction de fork()

var cp = require(&#39;child_process&#39;);
var n = cp.fork(__dirname + &#39;/sub.js&#39;);
n.on(&#39;message&#39;, function(m) {
  console.log(&#39;PARENT got message:&#39;, m);
});
n.send({ hello: &#39;world&#39; });
Copier après la connexion

Les résultats de l'exécution de l'extrait de code ci-dessus :

PARENT got message: { foo: &#39;bar&#39; }
CHILD got message: { hello: &#39;world&#39; }
Copier après la connexion

Le contenu de sub.js est le suivant :

process.on(&#39;message&#39;, function(m) {
  console.log(&#39;CHILD got message:&#39;, m);
});
process.send({ foo: &#39;bar&#39; });
Copier après la connexion

Dans le sous-processus, l'objet processus a une méthode send(), et il publiera le message à chaque fois qu'il reçoit 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 process.send(). () est reçue par la méthode child.on()

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

var http = require(&#39;http&#39;);
var cp = require(&#39;child_process&#39;);
var server = http.createServer(function(req, res) {
    var child = cp.fork(__dirname + &#39;/fibonacci-calc.js&#39;);//每个请求都单独生成一个新的子进程
    child.on(&#39;message&#39;, function(m) {
        res.end(m.result + &#39;\n&#39;);
    });
    var input = parseInt(req.url.substring(1));
    child.send({input : input});
});
server.listen(8000);
Copier après la connexion

fibonacci-calc.js

function fib(n) {
    if (n < 2) {
        return 1;
    } else {
        return fib(n - 2) + fib(n - 1);
    }
}
process.on(&#39;message&#39;, function(m) {
    process.send({result: fib(m.input)});
});
Copier après la connexion

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

Le ci-dessus se trouve cet article. C'est tout. J'espère que vous l'aimerez tous.

Pour plus d'articles liés à l'implémentation multi-processus de child_process dans Node.js, veuillez faire attention au site Web PHP 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