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 相关文章推荐
将函数的实际参数转换成数组的方法
Jan 25 Javascript
javascript 触发HTML元素绑定的函数
Sep 11 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
微信小程序 开发MAP(地图)实例详解
Jun 27 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
Js经典案例的实例代码
May 10 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 Javascript
我所理解的JavaScript中的this指向
Sep 04 Javascript
详解Vue中的自定义指令
Dec 07 Vue.js
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实现图象锐化代码
2007/06/14 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python的几种开发工具介绍
2007/03/07 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python:socket传输大文件示例
2017/01/18 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
详解Python如何生成词云的方法
2018/06/01 Python
python 获取等间隔的数组实例
2019/07/04 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python 自动识别并连接串口的实现
2021/01/19 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2014年路政工作总结
2014/12/10 职场文书
毕业论文致谢信
2015/05/14 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript