2011-11-06 15 views
7

La mia domanda è abbastanza semplice. tuttavia, potrebbe essere necessario rispondere a una variabile diversa (suppongo)Quanti child_processes dovrei fork() in node.js?

Sto giocando con node.js e sto pensando a come utilizzarlo in un'architettura multi-core.

L'ultima versione fornisce i metodi child_process.fork() e child.spawn() per la programmazione multiprocesso. Ho letto su this un articolo molto buono (ma datato) sull'utilizzo di Node.js come server Comet su larga scala. Ora quindi nodejs fornisce la programmazione multiprocesso, non ho davvero idea di quanti processi dovrei generare per servire un numero elevato di richieste (supponendo che il mio server funzioni su una sola macchina). C'è un modo di scegliere il "migliore" (o almeno un buon numero) di processi figlio che fanno lo stesso lavoro?

Qualsiasi collegamento a una guida di partenza sarebbe molto apprezzato.

Grazie

risposta

9

I Node.js documentazione ufficiale ha un esempio di come utilizzare cluster:

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

Come si può vedere nel codice qui sopra, è necessario utilizzare il maggior numero di forchette come il numero di cpus che hai, in modo che tutti i core funzionino nello stesso tempo (distribuisci il lavoro tra i core del processore).

+1

grazie :) non ha visto questo paragrafo nel doc nodejs :) – ArtoAle

+0

Nessun problema, lo si può trovare qui: http://nodejs.org/docs/v0.6.0/api/cluster.html – alessioalex

+0

Sì , Sto dando un'occhiata più approfondita all'API ufficiale adesso! – ArtoAle

4

Nell'esempio Node.js, vogliono che ogni core esegua un solo processo. Non esiste alcuna restrizione tecnica sul numero di dipendenti per core, quindi è possibile eseguire quanti più canali è possibile finché il proprio systerm è in grado di gestire.

Tuttavia, l'esecuzione di più di un processo per core non migliora le prestazioni dell'app.

spero che aiuti!

+0

Il nodo eseguirà ogni fork su un core diverso (fino a un massimo di core)? –

+0

se hai 2 core per esempio, avrai 2 fork e in ogni fork ci sarà 1 app di nodo. –