Node.js中child_process实现多进程


Posted in Javascript onFebruary 03, 2015
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的斐波纳契数列的值

以上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
Mar 23 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
微信小程序实现倒计时60s获取验证码
Apr 17 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
微信小程序显示倒计时功能示例【测试可用】
Dec 03 Javascript
ES6 更易于继承的类语法的使用
Feb 11 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
谈谈JavaScript中的函数
Sep 08 Javascript
jquery实现增加删除行的方法
Feb 03 #Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
Feb 03 #Javascript
director.js实现前端路由使用实例
Feb 03 #Javascript
js与jquery回车提交的方法
Feb 03 #Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 #Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 #Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 #Javascript
You might like
PHP安全编程之加密功能
2006/10/09 PHP
PHP详细彻底学习Smarty
2008/03/27 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
jQuery each()小议
2010/03/18 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
vue.js实现照片放大功能
2020/06/23 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
python如何建立全零数组
2020/07/19 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
国庆节标语大全
2014/10/08 职场文书
稽核岗位职责
2015/02/10 职场文书
运动会开幕式主持词
2015/07/01 职场文书
放假通知怎么写
2015/08/18 职场文书
争做文明公民倡议书
2019/06/24 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js