国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Nodejs中解決cluster模塊的多進程如何共享數(shù)據(jù)問題

2019-11-19 18:59:42
字體:
供稿:網(wǎng)友

前述

nodejs在v0.6.x之后增加了一個模塊cluster用于實現(xiàn)多進程,利用child_process模塊來創(chuàng)建和管理進程,增加程序在多核CPU機器上的性能表現(xiàn)。本文將介紹利用cluster模塊創(chuàng)建的多線程如何共享數(shù)據(jù)的問題。

進程間數(shù)據(jù)共享

首先舉個簡單的例子,代碼如下:

var cluster = require('cluster'); var data = 0;//這里定義數(shù)據(jù)不會被所有進程共享,各個進程有各自的內(nèi)存區(qū)域 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 { //子進程,會被調(diào)用numCPUs次  data++;  console.log('DATA VALUE in ChildProcess %d: %d ' cluster.worker.id, data);}

運行結果如下: 

為什么我們在主進程代碼塊以及子進程代碼塊之外來聲明的變量不應該是全局變量么?答案是否定的。因為每個進程在內(nèi)存都有各自的區(qū)域,因此data++操作是在各自的區(qū)域內(nèi)進行的,也就是說變量data沒被共享。那么怎么來在各進程之間共享數(shù)據(jù)呢?來看下面的代碼:

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

運行結果如下:


因此如果需要共享數(shù)據(jù),需要在進程間使用消息通知來達到這個目的。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 司法| 垫江县| 防城港市| 邵阳县| 清镇市| 垦利县| 万宁市| 轮台县| 黔东| 易门县| 嘉黎县| 库尔勒市| 海兴县| 若尔盖县| 葫芦岛市| 清水县| 沭阳县| 衡山县| 乃东县| 新疆| 广元市| 米易县| 绵阳市| 临夏县| 柏乡县| 南靖县| 合作市| 沈丘县| 西安市| 永胜县| 溧阳市| 信阳市| 扎鲁特旗| 隆安县| 冷水江市| 华亭县| 凤翔县| 沛县| 淅川县| 镇赉县| 黄大仙区|