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 相关文章推荐
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
javascript动态生成树形菜单的方法
Nov 14 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
javascript跑马灯抽奖实例讲解
Apr 17 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 Javascript
浅谈Vue 初始化性能优化
Aug 31 Javascript
vue 微信扫码登录(自定义样式)
Jan 06 Javascript
js实现列表按字母排序
Aug 11 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
js 小数取整的函数
2010/05/10 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Python读写文件方法总结
2015/06/09 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
工地安全标语
2014/06/07 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
同学毕业留言寄语
2015/02/27 职场文书
导游词之崇武古城
2019/10/07 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技