2011-11-08 6 views

Respuesta

3

Nodo indica al sistema operativo (a través de epoll, kqueue, /dev/poll, o select) que debe ser notificado cuando se realiza una nueva conexión, y luego se va a dormir. Si alguien nuevo se conecta, entonces ejecuta la devolución de llamada. Cada conexión es solo una pequeña asignación de montón.

Es "activada por eventos" donde maneja IO de forma asíncrona (E/S no bloqueante). Enlaza internamente necesario para hacer epoll, kqueue, /dev/poll, o select manejo, pero para usted como usuario/cliente es absolutamente transparente.

p. Ej. epoll no es realmente un grupo de subprocesos, sino un recurso de notificación de eventos de E/S del SO, sobre el que se sienta node.js.

6

No, tiene async IO. Solo hay un hilo que bloquea hasta que algo sucede en algún lado, y luego maneja ese evento. Esto significa que un hilo en un proceso puede servir para muchas conexiones simultáneas. Algo así como

endless loop { 
    event = next_event() 
    dispatch_event(event) 
} 

La única excepción es el sistema de archivos, utiliza un grupo de subprocesos para eso debajo del capó.

+0

¿quiere decir que en realidad está serializado? cuando una solicitud está 'durmiendo', ¿cómo se despierta y le dice a la secuencia que comience? – codecompleting

+0

@codecompleting: puede indicarle al sistema operativo que le notifique cuando ingresen datos en un zócalo más o menos. – thejh

+0

¿Habría alguna ventaja para hacer NodeJS de subprocesos múltiples? ¿O puede básicamente utilizar completamente una CPU con un hilo? ¿Y puede NodeJS usar múltiples núcleos? –

Cuestiones relacionadas