Estoy aprendiendo NodeJS y solo quería aclarar algo. En varios tutoriales y libros introductorios hasta el momento, muy pronto describieron la arquitectura "no bloqueante" de Node, o más bien es posible (y recomendado, todo el punto) codificar de forma no bloqueante.
Por ejemplo, este ejemplo fue dado en un libro que estoy leyendo de una forma asíncrona 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 (como lo entiendo) es que Node realiza la llamada a la base de datos, luego continúa procesando lo que sea lo que sigue en la pila de llamadas. Cuando se complete la solicitud de la base de datos, la variable de datos en la función de devolución de llamada anónima se rellenará y esa función se agregará a la pila de llamadas (y luego se ejecutará cuando Node llegue a ella).
Mi pregunta es, ¿qué es exactamente procesar la solicitud de base de datos? ¿Seguramente Node tiene que bloquear mientras hace eso? ¿Qué es atender la solicitud de la base de datos? O si Node está esperando una solicitud GET de HTTP asíncrona a un recurso externo, ¿qué es lo que está atendiendo a esa solicitud que le permite a Node continuar procesando la pila de llamadas y "no bloquear"?