Home  >  Article  >  Web Front-end  >  child_process implements multi-process in Node.js_node.js

child_process implements multi-process in Node.js_node.js

WBOY
WBOYOriginal
2016-05-16 16:16:051682browse

Copy code The code is as follows:

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);

The above example provides a Fibonacci sequence calculation service. Since this calculation is quite time-consuming and is single-threaded, when there are multiple requests at the same time, only one can be processed. This can be solved by child_process.fork() This question

Here is an example from the official website, through which you can better understand the function of fork()

Copy code The code is as follows:

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' });

The result of executing the above code snippet:

Copy code The code is as follows:

PARENT got message: { foo: 'bar' }
CHILD got message: { hello: 'world' }

The content of sub.js is as follows:

Copy code The code is as follows:

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

In the child process, the process object has a send() method, and it will publish a message object every time it receives a message

What’s a little confusing is: the message sent by child.send() is received by the process.on() method, and the message sent by the process.send() method is received by the child.on() method

Referring to this example, we can improve the first service that provides Fibonacci data so that each request has a separate new process to handle

Copy code The code is as follows:

var http = require('http');
var cp = require('child_process');
var server = http.createServer(function(req, res) {
var child = cp.fork(__dirname '/fibonacci-calc.js');//Each request generates a new child process
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

Copy code The code is as follows:

function fib(n) {
If (n < 2) {
Return 1;
} else {
Return fib(n - 2) fib(n - 1);
}
}
process.on('message', function(m) {
Process.send({result: fib(m.input)});
});

After starting the service, visit http://localhost:8080/9 to calculate the value of the Fibonacci sequence of 9

The above is the entire content of this article, I hope you all like it.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn