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 相关文章推荐
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
js操作label给label赋值及取label的值示例
Nov 07 Javascript
JavaScript window.location对象
Nov 14 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
js正则表达式匹配数字字母下划线等
Apr 14 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
Dec 01 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
Vue.js实现可配置的登录表单代码详解
Mar 29 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
Aug 24 Javascript
Vue列表渲染的示例代码
Nov 01 Javascript
jquery向后台提交数组的代码分析
Feb 20 jQuery
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获取从html表单传递数组的方法
2015/03/20 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
Django实现单用户登录的方法示例
2019/03/28 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
本科生个人求职自荐信
2013/09/26 职场文书
音乐专业应届生教师求职信
2013/11/04 职场文书
结婚周年感言
2014/02/24 职场文书
车队安全员岗位职责
2015/02/15 职场文书
教师辞职书范文
2015/02/26 职场文书