最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 20:28:52
文档

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

Nodejs中解决cluster模块的多进程如何共享数据问题:前述nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。进程间数据共享首先举个简单的例子,代码如下:var
推荐度:
导读Nodejs中解决cluster模块的多进程如何共享数据问题:前述nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。进程间数据共享首先举个简单的例子,代码如下:var
前述

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);
}

运行结果如下:

wKiom1hGI9PjhMAvAAAJwSkxZBM314.png-wh_600x-s_2253347697.png

为什么我们在主进程代码块以及子进程代码块之外来声明的变量不应该是全局变量么?答案是否定的。因为每个进程在内存都有各自的区域,因此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' });
}

运行结果如下:

wKiom1hGI9PjhMAvAAAJwSkxZBM314.png-wh_600x-s_2253347697.png

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

文档

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

Nodejs中解决cluster模块的多进程如何共享数据问题:前述nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核CPU机器上的性能表现。本文将介绍利用cluster模块创建的多线程如何共享数据的问题。进程间数据共享首先举个简单的例子,代码如下:var
推荐度:
标签: 解决 多进程 Nodejs
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top