2011-11-06 17 views
7

Soruma son derece basit. bununla birlikte, yanıtlanacak farklı bir değişkeni gerektirebilir (sanırım)node.js içinde kaç tane child_processes fork() yapmalıyım?

node.js ile oynuyorum ve bunu çok çekirdekli bir mimaride nasıl kullanacağımı düşünüyorum.

En son sürüm, çok işlemli programlama için child_process.fork() ve child.spawn() yöntemlerini sağlar. Node.js'yi büyük ölçekli bir Comet sunucusu olarak kullanmakla ilgili this çok iyi (ancak tarihli) makaleyi okudum. Şimdi nodejs çok işlemli programlama sağlıyor, çok fazla sayıda istekte bulunmak için kaç tane işlem gerektiğiyle ilgili hiçbir fikrim yok (sunucumun tek bir makinede çalıştığı varsayılarak). Aynı işi yapan 'en iyi' (veya en az iyi bir) çocuk süreçlerini seçmenin bir yolu var mı?

Başlangıç ​​kılavuzuna giden herhangi bir bağlantı çok takdir edilecektir.

cevap

9

node.js resmi belgeler küme nasıl kullanılacağına ilişkin bir örnek vardır teşekkür ederiz:

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('death', function(worker) { 
    console.log('worker ' + worker.pid + ' died'); 
    }); 
} else { 
    // Worker processes have a http server. 
    http.Server(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world\n"); 
    }).listen(8000); 
} 

Yukarıdaki kodda görebileceğiniz gibi, size sayısı kadar çatal kullanmalıdır Cpus'un sahip olması, böylece tüm çekirdeklerin aynı anda çalışması (işlemcinizin çekirdeği arasındaki işi dağıtması).

+1

teşekkür ederim :) nodejs doc bu paragrafı :) – ArtoAle

+0

Sorun görmedik, buradan bulabilirsiniz: http://nodejs.org/docs/v0.6.0/api/cluster.html – alessioalex

+0

Evet Şu anda resmi API'ye daha derin bir bakış atıyorum! – ArtoAle

4

Node.js örneğinde, her çekirdeğin yalnızca tek bir işlem yürütmesini isterler. Çekirdek başına kaç işçi sayısına ilişkin teknik bir sınırlama yoktur, bu sayede, systerm'iniz işleyebildiğiniz kadarıyla çalıştırabilirsiniz. Ancak, nolu çekirdek başına birden fazla işlemin çalıştırılması, uygulamanın performansını artırmaz.

Umut etmesine yardımcı olur!

+0

Will Düğüm her bir çatalı daha sonra farklı bir çekirdeğe geçirecek (maksimum çekirdeğe kadar)? –

+0

Örneğin 2 çekirdek varsa, 2 çatal ve her çatal olacak, 1 düğüm uygulaması olacak. –

İlgili konular