Maison  >  Article  >  interface Web  >  Explication détaillée des étapes de partage de ressources entre le processus parent NodeJS et le processus enfant

Explication détaillée des étapes de partage de ressources entre le processus parent NodeJS et le processus enfant

php中世界最好的语言
php中世界最好的语言original
2018-05-11 10:07:421569parcourir

Cette fois, je vais vous apporter une explication détaillée des étapes de partage de ressources entre le processus parent NodeJS et le processus enfant. Quelles sont les précautions pour le partage de ressources entre le processus parent NodeJS et le processus enfant. Ce qui suit est un cas pratique, jetons-y un œil.

Objectif expérimental : Réaliser le partage de ressources entre le processus parent et le processus enfant

Utiliser le module : cluster

Introduction : Établissez un cluster de nœuds pour implémenter plusieurs processus, utilisez child_process pour implémenter IPC et résoudre l'utilisation multicœur, améliorer les performances.

Principe :

1 Architecture multi-processus du mode maître-ouvrier maître-esclave

2 fork()Copier processus, Utiliser pleinement les ressources du processeur (déterminées par le nombre de cœurs)

3 Chaque processus a sa propre zone Si les opérations sont effectuées dans leurs zones respectives, les ressources ne sont pas partagées. En écoutant le message événement et en l'envoyant, la livraison du message est obtenue pour obtenir l'effet de partage de ressources

4 globalDataError est la mauvaise méthode de partage de ressources et globalDataSuccess est la bonne méthode de partage de ressources.

Code d'implémentation :

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

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez faire attention aux autres sites Web chinois php Articles connexes !

Lecture recommandée :

axios envoie une demande de publication et soumet le formulaire d'image en détail

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn