2011-05-30 9 views
5

Aunque Node.js es un tema muy candente, me parece que se ha informado de que Node.js podría no ser apropiado para la aplicación en tiempo real debido a su modelo Garbage Collection (http://amix.dk/blog/post/ 19577). Y, algunos puntos de referencia muestran que Node.js responde lento en comparación con RingoJS (http://hns.github.com/2010/09/29/benchmark2.html).¿Suba la escalabilidad de Node.js debido a la recolección de basura cuando está bajo mucha carga?

Por el momento, Node.js está vinculado al motor de JavaScript V8 que utiliza el GC generacional stop-the-world.

Entonces, ¿se atrapará Node.js cuando las solicitudes entrantes son masivas? Si hay estadísticas de producción reales, sería mejor.

Gracias

+0

Si tiene suficientes conexiones que el GC hace la diferencia, entonces ejecutará un nodo como múltiples procesos escalando a través de sus núcleos. Esto al menos disminuirá el "daño" del GC. – Raynos

+1

Esto podría generar más rendimiento, pero no alivia un problema de latencia de vez en cuando cuando se inicia GC. –

Respuesta

2

El coste de la recogida de basura depende del número de objetos en el montón, en particular el número de objetos de larga vida. Cuanto más tenga, más tiempo se gastará en GC.

Sí, V8 actualmente puede tomar algunas pausas de GC considerables a veces si el montón es grande. Parece que el equipo de V8 está trabajando para minimizar el costo de cada pausa del GC distribuyendo el trabajo. Puede ver el costo de GC en sus propios programas de nodo comenzando con --trace-gc.

Para muchas aplicaciones, el costo del GC se ve compensado por el compilador de optimización cada vez más excelente. Sugiero probar un programa simple y medir tanto el costo de GC según lo informado por V8 como medir la latencia de cliente a cliente. Descubrí que los costos de GC son casi completamente ignorables cuando los clientes se conectan a través de Internet abierto.

Cuestiones relacionadas