/ / ¿Cuántos procesos secundarios puede generar un clúster node.js en una PC Wintel de 64 bits? - windows, node.js, concurrencia, 64bit, proceso

¿Cuántos procesos secundarios puede generar un clúster node.js en una PC Wintel de 64 bits? - windows, node.js, concurrencia, 64bit, proceso

Estaba ejecutando una prueba de concurrencia, y paraEn aras de la brevedad, se definió un proceso para cada solicitud http falsificada. Funcionó bien para hasta 64 solicitudes / procesos, pero se plegó en 65. Estoy ejecutando Window 7 (64 bits) en una computadora portátil I5, con 4GB de RAM.

Mientras ejecutaba la prueba tenía un Chrome abierto (conun puñado de pestañas), y espero que los procesos comunes del sistema operativo también tengan algún efecto, pero sé muy poco acerca de node.js en el nivel más bajo para entender dónde está el problema.

Por ejemplo, un artículo sugiere que es posible ejecutar más de 8000 procesos en un sistema Windows XP de 2GB y 64 bits:

http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

Pero la figura del proceso de 64 niños con la que me topé era bastante conspicua.

¿Algunas ideas?

Respuestas

11 para la respuesta № 1

Bueno, el nodo es asíncrono, no hay bloqueo,solo por el script actual y puede manejar múltiples conexiones a la perfección, lo que significa que en una alta concurrencia, usaría toda su CPU, pero cada proceso solo puede usar un núcleo, ya que el Nodo no está enlazado. Así que, técnicamente, lo que se recomienda tener es tener tantos procesos como sus núcleos, un núcleo para cada proceso. En ese caso, en una alta concurrencia, el cluster Nodo usaría toda la CPU. Si va más allá de eso, está desperdiciando su RAM y poniendo trabajo extra en su programador de sistema operativo. Además de eso, cada proceso de nodo tiene un tiempo de inicio. Por lo tanto, es muy costoso crear un proceso nodejs en tiempo de ejecución.

Desde Node.JS docs:

Estos nodos secundarios son todavía nuevas instancias de V8. Supongamos al menos Inicio de 30 ms y memoria de 10 mb para cada nuevo nodo. Es decir, no puedes Crea muchos miles de ellos.

Conclusión, lo mejor que puede hacer es bifurcar de la misma forma que el número de núcleos de su CPU, que es:

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");
cluster.fork();
});
} else {
// Worker processes have a http server.
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello worldn");
}).listen(8000);
}

De hecho, tenemos un servidor de producción que hace eso, que puede tomar cerca de 1000 concurrencias y una latencia de menos de 10 ms al servicio del mundo de saludo.