Sto imparando NodeJS e volevo solo chiarire qualcosa. In molti tutorial e libri introduttivi finora, molto presto hanno descritto l'architettura "non bloccante" di Node - o piuttosto che è possibile (e consigliato, l'intero punto) di codificare in modo non bloccante.
Quindi, ad esempio, questo esempio è stato fornito in un libro che sto leggendo di un modo asincrono per ottenere dati da un database.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
Ciò che accade (a quanto ho capito) è che il nodo effettua la chiamata al database, quindi continua l'elaborazione di ciò che potrebbe essere successivo nello stack di chiamate. Quando la richiesta del database è completa, la variabile di dati nella funzione di callback anonima verrà popolata e quella funzione aggiunta allo stack di chiamate (e successivamente eseguita quando il nodo lo raggiunge).
La mia domanda è, che cosa è esattamente l'elaborazione la richiesta del database? Sicuramente il nodo deve bloccare mentre lo fa? Cosa si sta prendendo cura della richiesta del database? Oppure se il nodo è in attesa su una richiesta HTTP GET asincrona a una risorsa esterna, cosa si sta prendendo cura di quella richiesta che consente al nodo di continuare ad elaborare lo stack di chiamate e di essere "non-bloccante"?