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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
一文秒懂nodejs中的异步编程
Jan 28 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的autoLoad自动加载机制
2012/09/27 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
python处理大数字的方法
2015/05/27 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Flask框架配置与调试操作示例
2018/07/23 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
给领导的检讨书
2014/02/16 职场文书
初三毕业评语
2014/12/26 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python实现自动清理文件夹旧文件
2021/05/10 Python
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers
springcloud整合seata
2022/05/20 Java/Android