Heim  >  Artikel  >  Web-Frontend  >  child_process implementiert Multiprozesse in Node.js_node.js

child_process implementiert Multiprozesse in Node.js_node.js

WBOY
WBOYOriginal
2016-05-16 16:16:051645Durchsuche

Code kopieren Der Code lautet wie folgt:

var http = require('http');
Funktion fib (n) {
Wenn (n < 2) {
Rückgabe 1;
} sonst {
Rückgabe 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);

Das obige Beispiel stellt einen Fibonacci-Sequenzberechnungsdienst bereit. Da diese Berechnung ziemlich zeitaufwändig ist und mehrere Anforderungen gleichzeitig vorliegen, kann dies durch child_process gelöst werden. fork() Diese Frage

Hier ist ein Beispiel von der offiziellen Website, anhand dessen Sie die Funktion von fork() besser verstehen können

Code kopieren Der Code lautet wie folgt:

var cp = require('child_process');
var n = cp.fork(__dirname '/sub.js');
n.on('message', function(m) {
console.log('PARENT got message:', m);
});
n.send({ hello: 'world' });

Das Ergebnis der Ausführung des obigen Codeausschnitts:

Code kopieren Der Code lautet wie folgt:

PARENT hat die Nachricht erhalten: { foo: 'bar' }
KIND hat die Nachricht erhalten: { hello: 'world' }

Der Inhalt von sub.js ist wie folgt:

Code kopieren Der Code lautet wie folgt:

process.on('message', function(m) {
console.log('CHILD got message:', m);
});
Process.send({ foo: 'bar' });

Im untergeordneten Prozess verfügt das Prozessobjekt über eine send()-Methode und veröffentlicht jedes Mal ein Nachrichtenobjekt, wenn es eine Nachricht empfängt

Was etwas verwirrend ist: Die von child.send() gesendete Nachricht wird von der Methodeprocess.on() empfangen, und die von der Methodeprocess.send() gesendete Nachricht wird von child.on() empfangen Methode

Anhand dieses Beispiels können wir den ersten Dienst verbessern, der Fibonacci-Daten bereitstellt, sodass für jede Anfrage ein separater neuer Prozess zu verarbeiten ist

Code kopieren Der Code lautet wie folgt:

var http = require('http');
var cp = require('child_process');
var server = http.createServer(function(req, res) {
var child = cp.fork(__dirname '/fibonacci-calc.js');//Jede Anfrage generiert einen neuen untergeordneten Prozess
child.on('message', function(m) {
          res.end(m.result 'n');
});
var input = parseInt(req.url.substring(1));
child.send({input : input});
});
server.listen(8000);

fibonacci-calc.js

Code kopieren Der Code lautet wie folgt:

Funktion fib(n) {
Wenn (n < 2) {
Rückgabe 1;
} sonst {
Rückgabe fib(n - 2) fib(n - 1);
}
}
process.on('message', function(m) {
Process.send({result: fib(m.input)});
});

Besuchen Sie nach dem Starten des Dienstes http://localhost:8080/9, um den Wert der Fibonacci-Folge von 9

zu berechnen

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn