视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Node.js中child_process实现多进程
2020-11-27 20:27:49 责编:小采
文档

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

以上示例提供了一个斐波纳契数列的计算服务,由于此计算相当耗时,且是单线程,当同时有多个请求时只能处理一个,通过child_process.fork()就可以解决此问题

这里引用一下官网上的一个示例,通过这个例子可以很好的理解fork()的功能

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

执行上述代码片段的运行结果:

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

sub.js的内容如下:

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

在子进程中process对象有send()方法,同时它在每一次接收到消息时都会发布消息对象

有点晕的是:child.send()发送的消息,是由process.on()方法接收的,process.send()方法发送的消息是由child.on()方法接收的

参照这个例子我们就可以把第一个提供斐波纳契数据的服务进行改进,使每一个请求都有单独的一个新的进程来处理

var http = require('http');
var cp = require('child_process');
var server = http.createServer(function(req, res) {
 var child = cp.fork(__dirname + '/fibonacci-calc.js');//每个请求都单独生成一个新的子进程
 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

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

启动服务后,访问http://localhost:8080/9就可以计算出9的斐波纳契数列的值

下载本文
显示全文
专题