Maison  >  Article  >  interface Web  >  Apprentissage du module cluster dans Node

Apprentissage du module cluster dans Node

不言
不言original
2018-06-30 14:23:532057parcourir

Cet article présente principalement le module cluster de Node learning record. Le contenu est assez bon, je vais le partager avec vous maintenant et le donner comme référence.

Dans le contexte des machines actuelles équipées de processeurs multicœurs, la conception monothread de Node ne peut plus « réduire » complètement les performances de la machine. Ainsi, à partir de la version 0.8, Node a ajouté un module intégré - "cluster", d'où son nom. Il peut réaliser la fonction de cluster en gérant un ensemble de processus enfants via un processus parent.

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length; // 获取CPU的个数
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
 
  cluster.on(&#39;exit&#39;, function(worker, code, signal) {
    console.log(&#39;worker &#39; + worker.process.pid + &#39; died&#39;);
  });
} else {
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

Utilisez l'attribut isMaster pour déterminer s'il s'agit du processus maître. Si c'est le cas, dupliquez le processus enfant, sinon démarrez un serveur. Chaque serveur HTTP peut écouter le même port. Cependant, dans les projets réels, notre code de démarrage est généralement encapsulé dans app.js. Il n'est pas élégant d'intégrer toute la logique de démarrage dans le if else ci-dessus. Ainsi, nous pouvons faire ceci :

var cluster = require(&#39;cluster&#39;);
var numCPUs = require(&#39;os&#39;).cpus().length;
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  // 其它代码
  
} else {
  require("./app.js");
}

La simplicité est que la logique de l'application d'origine n'a pas besoin de savoir si elle est dans un cluster ou unilatéralement. (Bien sûr, si l'application conserve certains états en mémoire, comme les sessions, elle doit utiliser un mécanisme pour les partager. Je n'entrerai pas dans les détails ici)

Ce qui précède est l'intégralité contenu de cet article. J'espère qu'il sera utile à tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Méthode de nodejs pour implémenter le chargement asynchrone bigpipe des pages

À propos de node.js basé sur le module fs système Méthodes de lecture et d'écriture de fichiers et de répertoires

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