Sto imparando NodeJS e volevo solo chiarire qualcosa. Finora, in numerosi tutorial e libri introduttivi, hanno descritto molto presto l'architettura "non bloccante" di Node - o piuttosto che è possibile (e raccomandato l'intero punto) codificare in modo non bloccante.
Quindi, per esempio, questo esempio è stato dato 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);
});
});
Quello che succede (per quanto ho capito) è che Node effettua la chiamata al database, quindi continua a elaborare qualunque cosa possa essere successiva nello stack di chiamate. Quando la richiesta del database è completa, la variabile di dati nella funzione di richiamata anonima verrà popolata e tale funzione verrà aggiunta allo stack di chiamate (e successivamente eseguita quando Node arriva ad essa).
La mia domanda è: che cosa sta esattamente elaborando la richiesta del database? Sicuramente Node deve bloccare mentre lo fa? Cosa si occupa della richiesta del database? O se Node è in attesa di una richiesta HTTP GET asincrona a una risorsa esterna, cosa si occupa di quella richiesta che consente a Node di continuare a elaborare lo stack di chiamate e di essere "non bloccante"?
net
pacchetto quando http non è disponibile.