Node学习记录之cluster模块


Posted in Javascript onMay 31, 2017

在如今机器的CPU都是多核的背景下,Node的单线程设计已经没法更充分的"压榨"机器性能了。所以从v0.8开始,Node新增了一个内置模块——“cluster”,故名思议,它可以通过一个父进程管理一坨子进程的方式来实现集群的功能。

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length; // 获取CPU的个数
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
 
  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

通过isMaster属性,判断是否Master进程,是则fork子进程,否则启动一个server。每个HTTP server都能监听到同一个端口。但是在实际项目中,我们的启动代码一般都已经封装在了app.js中,要把整块启动逻辑嵌在上面的if else中实在不优雅。 所以,我们可以这样:

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  // 其它代码
  
} else {
  require("./app.js");
}

简单之处就在于原本的应用逻辑根本不需要知道自己是在集群还是单边。(当然,如果应用在内存中维护了某些状态,比如session,就需要运用某些机制来共享了,这里不详说)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 定义新对象方法
Feb 20 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
javascript 回调函数详解
Nov 11 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
Jun 13 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
vue.js前后端数据交互之提交数据操作详解
Apr 24 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 Javascript
Express框架之connect-flash详解
May 31 #Javascript
node.js中express-session配置项详解
May 31 #Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 #Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 #Javascript
JS简单实现自定义右键菜单实例
May 31 #Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 #Javascript
基于react框架使用的一些细节要点的思考
May 31 #Javascript
You might like
php下载文件的代码示例
2012/06/29 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
node Buffer缓存区常见操作示例
2019/05/04 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Python模块学习 filecmp 文件比较
2012/08/27 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
印刷工程专业应届生求职信
2013/09/29 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
代理人委托书
2014/08/01 职场文书
检讨书模板
2015/01/29 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
德劲DE1105机评
2022/04/05 无线电
React更新渲染原理深入分析
2022/12/24 Javascript