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 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
屏蔽相应键盘按钮操作
Mar 10 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
vue双向绑定的简单实现
Dec 22 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
浅析vue.js数组的变异方法
Jun 30 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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在linux上执行外部命令的方法
2017/02/06 PHP
thinkphp分页集成实例
2017/07/24 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
js 颜色选择插件
2017/01/23 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
js实现点击烟花特效
2020/10/14 Javascript
python logging类库使用例子
2014/11/22 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python全栈知识点总结
2019/07/01 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
中学教师请假制度
2014/02/03 职场文书
元旦晚会感言
2014/03/12 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
Pandas数据结构之Series的使用
2022/03/31 Python
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
TS 类型兼容教程示例详解
2022/09/23 Javascript