NodeJS父进程与子进程资源共享原理与实现方法


Posted in NodeJs onMarch 16, 2018

本文实例讲述了NodeJS父进程与子进程资源共享原理与实现方法。分享给大家供大家参考,具体如下:

实验目标:实现父进程与子进程间资源共享

使用模块:cluster

简介:建立node集群,实现多进程,利用child_process来实现IPC,解决多核利用率,提高性能。

原理:

1 Master-worker主从模式的多进程架构

2 fork()复制进程,充分利用cpu资源(根据内核数决定)

3 每个进程都有自己的区域,如果在各自区域内执行操作,资源并未共享。通过监听message事件和send实现消息传递,达到资源共享的效果

4  globalDataError为错误的资源共享方式, globalDataSuccess为正确的资源共享方式。

实现代码:

var cluster = require('cluster');
var cpus = require('os').cpus();
// 传递的事件名
var triggerEvent = {
    inc: 'inc',
    dec: 'dec'
}
// 错误的数据共享方式
var globalDataError = 0;
if (cluster.isMaster) {
  // 正确的数据共享方式
  var globalDataSuccess = 0;
  globalDataError++;
  // 启动多个进程,取决于内核数
  for (var i = 0; i < cpus.length; i++) {
    var worker = cluster.fork();
    worker.on('message', function(msg) {
      switch (msg) {
        case triggerEvent.inc:
          globalDataSuccess++;
          console.log('globalDataSuccess = ', globalDataSuccess);
          break;
        case triggerEvent.dec:
          globalDataSuccess--;
          console.log('globalDataSuccess = ', globalDataSuccess);
          break;
      }
    });
  }
  console.log('Master globalDataError = ', globalDataError);
} else {
  globalDataError++;
  console.log('Worker globalDataError = ', globalDataError);
  process.send(triggerEvent.dec);
  process.send(triggerEvent.inc);
}

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
nodejs教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 #NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 #NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 #NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 #NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 #NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 #NodeJs
nodejs acl的用户权限管理详解
Mar 14 #NodeJs
You might like
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
javascript自执行函数
2017/02/10 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
通过Pandas读取大文件的实例
2018/06/07 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
python dict 相同key 合并value的实例
2019/01/21 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
Python 可视化神器Plotly详解
2020/12/26 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
品恩科技软件测试面试题
2014/10/26 面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
班班通校本培训方案
2014/03/12 职场文书
陈欧的广告词
2014/03/18 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
八一建军节慰问信
2015/02/14 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
不同意离婚代理词
2015/05/23 职场文书
2016新年年会主持词
2015/07/06 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js