Estoy aprendiendo NodeJS y solo quería aclarar algo. En varios tutoriales y libros introductorios hasta el momento, describieron muy pronto la arquitectura "sin bloqueo" de Node, o mejor dicho, es posible (y se recomienda, todo el punto) codificar de manera no bloqueante.
Entonces, por ejemplo, este ejemplo se dio en un libro que estoy leyendo sobre una forma asincrónica de obtener datos de una base de datos.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
Lo que sucede (según tengo entendido) es que Node realiza la llamada a la base de datos, luego continúa procesando lo que pueda ser el próximo en la pila de llamadas. Cuando se completa la solicitud de la base de datos, la variable de datos en la función de devolución de llamada anónima se completará y esa función se agregará a la pila de llamadas (y posteriormente se ejecutará cuando Node llegue a ella).
Mi pregunta es, ¿qué es exactamente el procesamiento de la solicitud de la base de datos? ¿Seguramente Nodo tiene que bloquear mientras hace eso? ¿Qué se ocupa de la solicitud de la base de datos? O si Node está esperando una solicitud GET HTTP asíncrona a un recurso externo, ¿qué se está ocupando de esa solicitud que le permite a Node continuar procesando la pila de llamadas y "sin bloqueo"?
net
paquete cuando http no está disponible.