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 相关文章推荐
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
单击按钮显示隐藏子菜单经典案例
Jan 04 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
Sep 25 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
Nov 05 Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 Javascript
动态加载js的方法汇总
Feb 13 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
Jul 13 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 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中命名空间的使用例子
2019/03/22 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
详解node中创建服务进程
2017/05/09 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
python ip正则式
2009/05/07 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
python实现ID3决策树算法
2017/12/20 Python
python读取文本中的坐标方法
2018/10/14 Python
python如何实现一个刷网页小程序
2018/11/27 Python
python的继承知识点总结
2018/12/10 Python
浅谈python常用程序算法
2019/03/22 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
员工拾金不昧表扬信
2014/01/09 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2015年新教师工作总结
2015/04/28 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题