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 showModelDialog的使用方法示例详解
Nov 19 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 Javascript
vue.js表格分页示例
Oct 18 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
微信小程序将字符串生成二维码图片的操作方法
Jul 17 Javascript
vue2.0获取鼠标位置的方法
Sep 13 Javascript
JS实现随机生成10个手机号的方法示例
Dec 07 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 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
信用卡效验程序
2006/10/09 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php解析json数据实例
2014/08/19 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
js实现tab切换效果
2017/02/16 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
AJAX的全称是什么
2012/11/06 面试题
结婚喜宴家长答谢词
2014/01/15 职场文书
家长对孩子的评语
2014/04/18 职场文书
大学计划书范文800字
2014/08/14 职场文书
青年志愿者活动方案
2014/08/17 职场文书
师德承诺书
2015/01/20 职场文书
大班下学期个人总结
2015/02/13 职场文书
小学运动会开幕词
2016/03/04 职场文书