Uczę się NodeJS i chciałem tylko coś wyjaśnić. W kilku wprowadzających podręcznikach i książkach do tej pory bardzo wcześnie opisali „nieblokującą” architekturę Node - a raczej, że możliwe jest (i zalecił cały punkt) kodowanie w sposób nieblokujący.
Na przykład ten przykład został podany w książce Czytam o asynchronicznym sposobie pobierania danych z bazy danych.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
To, co się dzieje (jak rozumiem), to Węzeł wykonuje wywołanie do bazy danych, a następnie kontynuuje przetwarzanie wszystkiego, co może być następne na stosie wywołań. Po zakończeniu żądania bazy danych zmienna danych w anonimowej funkcji wywołania zwrotnego zostanie zapełniona, a funkcja ta dodana do stosu wywołań (a następnie wykonana, gdy dotrze do niego Węzeł).
Moje pytanie brzmi: co dokładnie przetwarza żądanie bazy danych? Z pewnością Node musi blokować? Co zajmuje się żądaniem bazy danych? Lub jeśli Węzeł czeka na asynchroniczne żądanie HTTP GET do zasobu zewnętrznego, co się dzieje z tym żądaniem, które umożliwia Węzłu kontynuowanie przetwarzania stosu wywołań i „blokowanie”?
źródło
net
pakiet, gdy http nie jest dostępny.