2012-02-29 16 views
43

No entiendo varias cosas sobre nodejs. Cada fuente de información dice que node.js es más escalable que los servidores web con hilos estándar debido a la falta de bloqueo de hilos y al cambio de contexto, pero me pregunto si node.js no usa hilos ¿cómo maneja las solicitudes simultáneas en paralelo? ¿Qué significa el modelo de E/S de eventos?¿Cómo funciona node.js?

Su ayuda es muy apreciada. Gracias

Respuesta

74

El nodo está completamente orientado a eventos. Básicamente, el servidor consiste en un hilo procesando un evento tras otro.

Una nueva solicitud que entra es un tipo de evento. El servidor comienza a procesarlo y, cuando hay una operación de bloqueo de IO, no espera hasta que se complete y en su lugar registra una función de devolución de llamada. El servidor inmediatamente comienza a procesar otro evento (tal vez otra solicitud). Cuando finaliza la operación IO, se trata de otro tipo de evento y el servidor lo procesará (es decir, continuará trabajando en la solicitud) al ejecutar la devolución de llamada tan pronto como tenga tiempo.

De modo que el servidor nunca necesita crear subprocesos adicionales o cambiar entre subprocesos, lo que significa que tiene muy poca sobrecarga. Si desea hacer pleno uso de múltiples núcleos de hardware, que acaba de iniciar varias instancias de Node.js

actualización En el nivel más bajo (código C++, no JavaScript), there actually are multiple threads en Node.js: hay una grupo de trabajadores de IO cuyo trabajo es recibir las interrupciones de IO y colocar los eventos correspondientes en la cola para ser procesados ​​por el hilo principal. Esto evita que el hilo principal sea interrumpido.

+1

Gracias Michael. Entiendo que las operaciones async IO son la naturaleza de JS, pero lo que no entiendo es que si node.js/JS tiene un solo subproceso, ¿cómo maneja las operaciones asincrónicas? Puede ejecutar una operación de E/S asíncrona en paralelo con el código del lado del servidor, pero cómo. – Davita

+3

@Davita: las operaciones de E/S no las realiza la CPU. El código del lado del servidor no tiene que involucrarse hasta que el hardware externo haya llenado algún buffer y le dice a la CPU sobre esto a través de un mecanismo de interrupción. –

+5

@Davita hay un pequeño informe sobre el ciclo de eventos node.js aquí: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ – LoG

0

Aunque la pregunta ya se ha explicado antes de mucho tiempo, estoy pensando lo mismo.

Node JS es una tecnología de rosca única. Básicamente, la preocupación del creador de Nodo JS (Ryan Dahl) era que el procesamiento paralelo usando múltiples hilos no es el camino correcto o demasiado complicado.

si Node.js no utiliza hilos ¿cómo manejar las solicitudes simultáneas en paralelo

Respuesta: Es frase completamente equivocado cuando dice que no utiliza hilos, hilos de nodo Js uso, pero de una manera inteligente. Se utiliza un solo hilo para servir a todo el HTTP solicita & múltiples hilos en grupo de subprocesos (en libuv) para la manipulación de cualquier operación de bloqueo

Libuv: Una biblioteca para manejar asíncrono I/O.

¿Qué significa el modelo de E/S de evento?

Resp: El término correcto es E/S sin bloqueo. Casi nunca se bloquea como dice el sitio oficial de Node JS. Cuando cualquier solicitud va al servidor de nodo, nunca pone en cola la solicitud. Solicita y comienza a ejecutar si está bloqueando la operación y luego se envía al área de trabajo y registra una devolución de llamada tan pronto como finaliza la ejecución del código, activa la misma devolución de llamada y va a la cola de eventos y se procesa nuevamente por evento. que crean respuesta y la envían al cliente respectivo.

Enlace de interés: click here