node.js scalability

¿Por qué es escalable Node.js?



scalability (4)

El javascript que ejecuta el nodo es de un solo hilo, pero muchas de las cosas que llama en el nodo, como la red o el archivo io, se ejecutan en hilos de fondo. Vea esta publicación para una descripción básica: el nodo no es un solo hilo

Si necesita los detalles importantes, debería buscar en libuv, que es la pieza ''mágica'' que convierte los hilos en bucles de eventos: http://nikhilm.github.io/uvbook/basics.html#event-loops

Además, si necesita hacer algo con un uso intensivo de la CPU en el propio nodo, puede enviarlo fácilmente a un proceso secundario; consulte http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options para obtener detalles

node.js escalable, ¿qué significa eso? Qué parte de un servidor node.js es escalable. Leí que es una tecnología de un solo hilo que no es adecuada para aplicaciones que necesitarían muchos recursos de CPU. Estos hechos no encajan con la escalabilidad, entonces, ¿qué significa eso?


Es escalable debido al balanceo de carga. Esencialmente, puede tener varios trabajos para que el nodo procese y puede manejarlo sin una carga significativa. Esto lo hace escalable.


No es que sea más escalable "per se". Es más que todo lo que haces es (I / O) escalable sin tener que hacer nada especial.

La E / S es más segura y más fácil de hacer en paralelo, ya que no comparte datos entre los subprocesos de ejecución. Node.js te permite hacerlo usando una programación de eventos que es simple, elegante y fácil de usar. Es un viejo y probado paradigma de programación, usado por años por GUIs y otras aplicaciones gráficas intensivas como juegos, por ejemplo.

De hecho, es menos escalable que los lenguajes completos como c ++, c, java, etc., que pueden escalar mucho mejor con el uso de multihilo completo. Esto permite escalar la CPU también, pero también abre una lata de gusanos. Para compartir la CPU, tienes que compartir datos, y esa es otra historia (semáforos, bloqueos, etc.)

Puede hacer lo mismo que node.js con cualquiera de los idiomas anteriores, pero no es parte del lenguaje en sí mismo, por lo que tiene que enrollar su propia cuenta o usar bibliotecas que se la proporcionen. Dicho esto, no es tan difícil, pero sí más difícil que en node.js.

La mayoría de los servicios web están vinculados a IO, por lo que Node.js encaja bien y está bien en la mayoría de los casos. Pero una vez que comienza a utilizar el trabajo intensivo de la CPU, los eventos no se revisan y todo se detiene. En ese caso mejor usar otro idioma. Realmente no hay una buena solución en Node para eso. Puede generar múltiples procesos, pero luego no podrá compartir datos entre ellos. Sin compartir datos, no hay forma de escalar la CPU de manera eficiente, así que mejor no lo intentes.

Use Node.js para IO, y un lenguaje mejor adaptado con multiproceso adecuado para trabajo intensivo de CPU.


Todas las API de nodo están escritas de tal manera que admiten devoluciones de llamada.

Por ejemplo, una función para leer un archivo puede comenzar a leer el archivo y devolver el control al entorno de ejecución de manera inmediata para que se pueda ejecutar la siguiente instrucción. Una vez que se complete la E / S del archivo, llamará a la función de devolución de llamada mientras pasa la función de devolución de llamada, el contenido del archivo como parámetro. Por lo tanto, no hay bloqueo o espera el archivo de E / S. Esto hace que Node.js sea altamente escalable, ya que puede procesar un gran número de solicitudes sin esperar a que ninguna función devuelva el resultado. - Punto de tutorial.