iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Nodejs中解决cluster模块的多进程如何共享数据问题
  • 248
分享到

Nodejs中解决cluster模块的多进程如何共享数据问题

模块进程数据 2022-06-04 17:06:39 248人浏览 八月长安
摘要

前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创

前述

nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。

进程间数据共享

首先举个简单的例子,代码如下:


var cluster = require('cluster'); 
var data = 0;//这里定义数据不会被所有进程共享,各个进程有各自的内存区域 
if (cluster.isMaster) { //主进程 
 var numCPUs = require('os').cpus().length; 
 for (var i = 0; i < numCPUs; i++) { 
  var worker = cluster.fork(); 
 } 
 data++; 
 console.log('DATA VALUE in MainProcess: %d ' , data);
} else { //子进程,会被调用numCPUs次 
 data++; 
 console.log('DATA VALUE in ChildProcess %d: %d ' cluster.worker.id, data);
}

运行结果如下:查看图片 

为什么我们在主进程代码块以及子进程代码块之外来声明的变量不应该是全局变量么?答案是否定的。因为每个进程在内存都有各自的区域,因此data++操作是在各自的区域内进行的,也就是说变量data没被共享。那么怎么来在各进程之间共享数据呢?来看下面的代码:


var cluster = require('cluster'); 
var Http = require('http'); 
 
if (cluster.isMaster) { 
 var numCPUs = require('os').cpus().length; 
 var data = 0; 
 // 启动多个进程. 
 for (var i = 0; i < numCPUs; i++) { 
 //增加一个进程 
 var worker_process = cluster.fork(); 
 //侦听子进程的message事件 
 worker_process.on('message', function(msg) { 
  if (msg.cmd && msg.cmd == 'notifyRequest') { 
  data++; 
  console.log('DATA VALUE : %d ', data);
  } 
 }); 
 } 
} else { 
 process.send({ cmd: 'notifyRequest' }); 
}

运行结果如下:

查看图片

因此如果需要共享数据,需要在进程间使用消息通知来达到这个目的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Nodejs中解决cluster模块的多进程如何共享数据问题

本文链接: https://www.lsjlt.com/news/12897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++多线程编程之如何解决多线程数据共享问题
    这篇文章主要讲解了“C++多线程编程之如何解决多线程数据共享问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多线程编程之如何解决多线程数据共享问题”吧!通过容器创建多个线程#incl...
    99+
    2023-06-15
  • Python线程之如何解决共享变量问题
    前面提到了银行转账这个场景,展示了一个比较耗时的转账操作。 这篇继续转帐,下面展示一段程序,多个线程的操作都更改了amount变量导致运行结果不对的问题。 前文说了转账问题 下面展示...
    99+
    2024-04-02
  • Golang开发中如何解决共享变量问题
    目录1、什么是竞态2、如何消除竞态3、Go 提供的并发工具3.1 互斥锁3.2 读写互斥锁3.3 Once3.4 竞态检测器4、小结Go 语言中 goroutine + channe...
    99+
    2024-04-02
  • 如何解决共享资源的访问冲突问题?
    php小编草莓将为您介绍如何解决共享资源的访问冲突问题。在多线程或多进程编程中,当多个线程或进程同时访问共享资源时,可能会导致数据不一致或错误的结果。为了解决这个问题,可以使用互斥锁、...
    99+
    2024-02-10
    同步机制
  • php如何解决进程太多的问题
    小编给大家分享一下php如何解决进程太多的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php进程太多的解决办法:1、通过“ps -ef  | wc...
    99+
    2023-06-25
  • 如何解决linux使用共享内存通信的进程同步退出问题
    本篇内容主要讲解“如何解决linux使用共享内存通信的进程同步退出问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决linux使用共享内存通信的进程同步退出问题”吧!两个甚至多个进程使用...
    99+
    2023-06-13
  • Static中如何进行C++类的数据共享
    这篇文章给大家介绍Static中如何进行C++类的数据共享,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++语言是对C语言的一个延伸,也就是说,一个C语言的程序,也可以认为是一个C++程序,对于在C++类中,静态成员...
    99+
    2023-06-17
  • 如何解决IDEA包转模块的问题
    这篇文章给大家分享的是有关如何解决IDEA包转模块的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在IDEA拉取代码,但是拉取下来之后,发现之前创建的模块变成包类型的了(直接模块也可能造成的这个问题,同样可以...
    99+
    2023-06-15
  • 如何解决多IE版本共存的问题
    这篇文章主要介绍“如何解决多IE版本共存的问题”,在日常操作中,相信很多人在如何解决多IE版本共存的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决多IE版本共存的问题”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-08
  • Android如何解决WebView多进程崩溃的问题
    小编给大家分享一下Android如何解决WebView多进程崩溃的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题在android 9.0系统上如果多个进程...
    99+
    2023-06-14
  • 如何解决PHP找不到模块的问题
    在进行PHP语言开发过程中,经常会遇到"找不到模块"的错误提示,这是由于PHP配置文件中没有引用正确的扩展模块所导致的。PHP虽然是一门开放源代码的脚本语言,但在很多方面都需要进行配置,以便让代码正常运行。接下来,我们就...
    99+
    2023-05-14
  • 如何解决Win7共享文件无法保存的问题
    我们经常使用共享文件夹来帮助我们传输文件,但是有朋友说设置共享文件后无法保存,那么遇到这种情况该怎么办呢?以下就和小编一起来看看有哪些解决方案。如何解决Win7共享文件无法保存的问题首先,我们找到需要共享的文件,右键打开选择属性。二、点击上...
    99+
    2023-07-10
  • 如何解决win7无法访问windows 2003共享文件的问题
      win7无法访问Windows 2003共享文件,但windows2003可以访问该win7系统,   win7之间也可以相互访问,查来查去原来是本地策略问题。   解决方法: &nbs...
    99+
    2023-05-26
    win7 windows2003 文件 windows 2003 问题 共享
  • 如何解读Java多线程与并发模型中的共享对象
    本篇文章为大家展示了如何解读Java多线程与并发模型中的共享对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以下内容如无特殊说明均指代Java环境。共享对象使用Java编写线程安全的程序关键在于正...
    99+
    2023-06-02
  • 如何解决nodejs中的异步操作问题
    这篇文章给大家分享的是有关如何解决nodejs中的异步操作问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基本概念:async 表示这是一个async函数,await只能用在这...
    99+
    2024-04-02
  • C++中如何确保多个并发进程正确的访问共享资源
    在C++中,可以使用互斥量(mutex)来确保多个并发进程正确地访问共享资源。互斥量是一种同步原语,它可以确保在任意时刻只有一个进程...
    99+
    2024-04-02
  • PHP并发编程中的数据类型:如何处理分布式系统中的数据共享问题?
    随着互联网的发展,分布式系统的应用越来越广泛。分布式系统中常常需要多个进程或者节点之间共享数据。数据共享是分布式系统中必不可少的一部分,而在PHP并发编程中,数据共享是一个复杂的问题。本文将介绍在PHP并发编程中如何处理数据共享问题。 ...
    99+
    2023-11-11
    并发 数据类型 分布式
  • 如何解决nginx中rtmp模块编译arm版本的问题
    这篇文章主要为大家展示了“如何解决nginx中rtmp模块编译arm版本的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决nginx中rtmp模块编译arm版本的问题”这篇文章吧。一、...
    99+
    2023-06-22
  • Centos安装python3与scapy模块的问题如何解决
    今天小编给大家分享一下Centos安装python3与scapy模块的问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-02
  • 如何解决bootstrap模态框数据缓存的问题
    这篇文章主要介绍如何解决bootstrap模态框数据缓存的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!问题背景第一步进行新增验证第二步进行修改模态框 验证信息没有消除 且表单数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作