Я изучаю NodeJS и просто хотел кое-что прояснить. В нескольких вводных руководствах и книгах уже очень рано они описали «неблокирующую» архитектуру Node - или, скорее, можно (и рекомендую весь смысл) кодировать неблокирующим образом.
Так, например, этот пример был приведен в книге, которую я читаю об асинхронном способе получения данных из базы данных.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
То, что происходит (насколько я понимаю), это то, что Node выполняет вызов к базе данных, затем продолжает обработку того, что может быть следующим в стеке вызовов. Когда запрос к базе данных будет завершен, переменная данных в анонимной функции обратного вызова будет заполнена, и эта функция будет добавлена в стек вызовов (и впоследствии выполнена, когда Node получит к нему).
У меня вопрос, что именно обрабатывает запрос к базе данных? Конечно, Нод должен блокировать, пока он это делает? Что заботится о запросе базы данных? Или, если Node ожидает асинхронный HTTP-запрос GET к внешнему ресурсу, что заботится об этом запросе, который позволяет Node продолжать обработку стека вызовов и быть «неблокирующим»?
net
пакет, когда http недоступен.