Nie jestem programistą węzłów, ale interesuje mnie, jak działa jednowątkowy, nieblokujący model IO . Po przeczytaniu artykułu dotyczącego zrozumienia pętli zdarzeń węzła-js jestem naprawdę zdezorientowany. Dał przykład dla modelu:
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: Gdy są dwa żądania A (przychodzi pierwszy) i B, ponieważ istnieje tylko jeden wątek, program po stronie serwera obsłuży żądanie A po pierwsze: wykonywanie zapytań SQL jest uśpioną instrukcją dla czekania we / wy. Program utknął w I/Ooczekiwaniu i nie może wykonać kodu renderującego stronę internetową. Czy program przełączy się na żądanie B podczas oczekiwania? Moim zdaniem, ze względu na model z jednym wątkiem, nie ma możliwości przełączenia jednego żądania z drugiego. Ale tytuł przykładowego kodu mówi, że wszystko działa równolegle oprócz twojego kodu .
(PS Nie jestem pewien, czy źle zrozumiałem kod, ponieważ nigdy nie korzystałem z Węzła.) Jak Węzeł przełącza A na B podczas oczekiwania? I czy możesz w prosty sposób wyjaśnić jednowątkowy nieblokujący model IO węzła? Byłbym wdzięczny, gdybyś mógł mi pomóc. :)
