2011-11-06 19 views
7

Mi pregunta es bastante simple. sin embargo, puede requerir que se responda una variable diferente (supongo)¿Cuántos child_processes debería fork() en node.js?

Estoy jugando con node.js y estoy pensando en cómo usarlo en una arquitectura multi core.

La última versión proporciona los métodos child_process.fork() y child.spawn() para la programación multiproceso. He leído en this un artículo muy bueno (pero anticuado) sobre el uso de Node.js como un servidor Comet a gran escala. Ahora bien, nodejs proporciona programación multiproceso, realmente no tengo idea de cuántos procesos debería generar para atender una gran cantidad de solicitudes (suponiendo que mi servidor se ejecute en una sola máquina). ¿Hay alguna manera de elegir el 'mejor' (o al menos un buen) número de procesos secundarios que realizan el mismo trabajo?

Cualquier enlace a una guía de inicio sería muy apreciado.

Gracias

Respuesta

9

Los Node.js documentación oficial tiene un ejemplo de cómo utilizar clúster:

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

Como se puede ver en el código anterior, se debe utilizar tantos como el número horquillas de CPU que tiene, para que todos los núcleos funcionen al mismo tiempo (distribuya el trabajo entre los núcleos de su procesador).

+1

gracias :) no vieron este párrafo en el documento nodejs :) – ArtoAle

+0

No hay problema, se puede encontrar aquí: http://nodejs.org/docs/v0.6.0/api/cluster.html – alessioalex

+0

Sí ¡Estoy mirando más profundamente la API oficial ahora mismo! – ArtoAle

4

En el ejemplo de Node.js, quieren que cada núcleo ejecute solo un proceso. No hay restricciones técnicas sobre la cantidad de trabajadores por núcleo, por lo que puede ejecutar tantos como pueda, siempre que su systerm pueda manejarlos.

Sin embargo, ejecutar más de un proceso por núcleo no mejora el rendimiento de la aplicación.

Espero que ayude!

+0

¿Funcionará cada nodo con cada horquilla en un núcleo diferente entonces (hasta un máximo de núcleos)? –

+0

si tiene 2 núcleos, por ejemplo, tendrá 2 horquillas y en cada horquilla, habrá una aplicación de nodo. –