Non sono un programmatore di nodi, ma sono interessato a come funziona il modello IO non bloccante a thread singolo . Dopo aver letto l'articolo capire-il-nodo-js-event-loop , sono davvero confuso al riguardo. Ha fornito un esempio per il modello:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Que: quando ci sono due richieste A (viene prima) e B poiché esiste un solo thread, il programma lato server gestirà la richiesta A in primo luogo: l'esecuzione di query SQL è un'istruzione sleep che indica l'attesa I / O. E il programma è bloccato I/Oall'attesa e non può eseguire il codice che rende la pagina web dietro. Il programma passerà alla richiesta B durante l'attesa? A mio avviso, a causa del modello a thread singolo, non è possibile passare da una richiesta a un'altra. Ma il titolo del codice di esempio dice che tutto funziona in parallelo tranne il tuo codice .
(PS Non sono sicuro di aver frainteso il codice o meno dal momento che non ho mai usato Node.) Come Nodo passa da A a B durante l'attesa? E puoi spiegare in modo semplice il modello IO non threading a thread singolo di Node? Gradirei se tu potessi aiutarmi. :)
