ホームページ >ウェブフロントエンド >jsチュートリアル >NodeJSの親プロセスと子プロセス間のリソース共有について詳しく解説

NodeJSの親プロセスと子プロセス間のリソース共有について詳しく解説

小云云
小云云オリジナル
2018-03-19 09:23:262002ブラウズ

この記事では、主に NodeJS の親プロセスと子プロセス間のリソース共有の原理と実装方法を紹介し、親プロセスと子プロセス間のリソース共有を実現するためのクラスター モジュールに基づいた NodeJS の関連操作スキルを例の形で分析します。皆さんのお役に立てれば幸いです。

実験目標: 親プロセスと子プロセス間のリソース共有を実現する

使用モジュール: cluster

導入: ノードクラスターを確立し、マルチプロセスを実装し、child_processを使用するそれを実現するために、IPC はマルチコアの使用率を解決し、パフォーマンスを向上させます。

原則:

1 マスター-ワーカー マスター-スレーブ モードのマルチプロセス アーキテクチャ

2 fork() CPU リソース (コアの数によって決まる) を最大限に活用するためにプロセスをコピーする

3 各プロセスには、独自の領域、それぞれの領域内で操作が実行される場合、リソースは共有されません。メッセージ イベントをリッスンして送信することで、メッセージ パッシングが実現され、リソース共有の効果が得られます

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(&#39;message&#39;, function(msg) {
      switch (msg) {
        case triggerEvent.inc:
          globalDataSuccess++;
          console.log(&#39;globalDataSuccess = &#39;, globalDataSuccess);
          break;
        case triggerEvent.dec:
          globalDataSuccess--;
          console.log(&#39;globalDataSuccess = &#39;, globalDataSuccess);
          break;
      }
    });
  }
  console.log(&#39;Master globalDataError = &#39;, globalDataError);
} else {
  globalDataError++;
  console.log(&#39;Worker globalDataError = &#39;, globalDataError);
  process.send(triggerEvent.dec);
  process.send(triggerEvent.inc);
}

以上がNodeJSの親プロセスと子プロセス間のリソース共有について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。