Home > Web Front-end > JS Tutorial > body text

Solve the problem of how to share data among multiple processes in the cluster module in Nodejs

高洛峰
Release: 2016-12-07 11:40:17
Original
1414 people have browsed it

As mentioned above

nodejs added a module cluster after v0.6.x to implement multi-process, using the child_process module to create and manage processes, and increase the performance of the program on multi-core CPU machines. This article will introduce how multi-threads created using the cluster module share data.

Inter-process data sharing

First, let’s take a simple example. The code is as follows:

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(&#39;DATA VALUE in MainProcess: %d &#39; , data);
} else { //子进程,会被调用numCPUs次
 data++;
 console.log(&#39;DATA VALUE in ChildProcess %d: %d &#39; cluster.worker.id, data);
}
Copy after login

The running results are as follows:

Solve the problem of how to share data among multiple processes in the cluster module in Nodejs

Why are we outside the main process code block and sub-process code block? Shouldn't the declared variables be global variables? the answer is negative. Because each process has its own area in memory, the data++ operation is performed in its own area, which means that the variable data is not shared. So how to share data between processes? Let’s look at the following code:

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

The running results are as follows:

Solve the problem of how to share data among multiple processes in the cluster module in Nodejs

So if you need to share data, you need to use message notifications between processes to achieve this purpose.


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!