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 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
YUI的Tab切换实现代码
Apr 11 Javascript
JQuery实现鼠标滑过显示导航下拉列表
Sep 12 Javascript
node.js中实现同步操作的3种实现方法
Dec 05 Javascript
js与jquery分别实现tab标签页功能的方法
Nov 18 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
Oct 20 Javascript
浅谈JsonObject中的key-value数据解析排序问题
Dec 06 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
electron + vue项目实现打印小票功能及实现代码
Nov 25 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 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 程序员的调试技术小结
2009/11/15 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
Python中使用item()方法遍历字典的例子
2014/08/26 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
一文总结学习Python的14张思维导图
2017/10/17 Python
python中cPickle类使用方法详解
2018/08/27 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
运动会通讯稿150字
2014/02/15 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
授权委托书
2014/07/31 职场文书
民事赔偿协议书
2014/11/02 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
我的长征观后感
2015/06/09 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书