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 相关文章推荐
js 判断 enter 事件
Feb 12 Javascript
Javascript 作用域使用说明
Aug 13 Javascript
JavaScript作用域链示例分享
May 27 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
Dec 22 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
Angular2 组件通信的实例代码
Jun 23 Javascript
微信小程序自定义模态对话框实例详解
Aug 16 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
May 13 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
JavaScript实现10秒后再次获取验证码
Dec 02 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代码
2008/09/10 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
jQuery操作cookie
2016/08/08 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
Python Flask-web表单使用详解
2017/11/18 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
校运会入场式解说词
2014/02/10 职场文书
《影子》教学反思
2014/02/21 职场文书
网络管理专业求职信
2014/03/15 职场文书
老人院义工活动感想
2015/08/07 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL