Я вивчаю 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 недоступний.