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学习笔记(一)基础知识
Sep 30 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
JavaScript获取元素尺寸和大小操作总结
Feb 27 Javascript
JavaScript 浏览器对象模型BOM使用介绍
Apr 13 Javascript
jQuery菜单插件用法实例
Jul 25 Javascript
AngularJs Understanding the Controller Component
Sep 02 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
Oct 31 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
pageGroup.js实现分页功能
Jul 27 Javascript
JS实现瀑布流效果
Mar 07 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里面的抽象类
2010/01/28 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
Java servlet面试题
2012/03/04 面试题
事业单位竞聘上岗实施方案
2014/03/28 职场文书
工业设计专业自荐书
2014/06/05 职场文书
就业协议书怎么填
2014/09/15 职场文书
小学教育见习报告
2014/10/31 职场文书
预备党员入党感言
2015/08/01 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
python playwright之元素定位示例详解
2022/07/23 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android