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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 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
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
php中socket的用法详解
2014/10/24 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
Python中字典和集合学习小结
2017/07/07 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
Python celery原理及运行流程解析
2020/06/13 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
国庆节活动总结
2014/08/26 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
2014年信访工作总结
2014/11/17 职场文书
民事诉讼代理词
2015/05/25 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技