Estou aprendendo NodeJS e só queria esclarecer uma coisa. Até agora, em vários tutoriais e livros introdutórios, eles descreveram a arquitetura "sem bloqueio" do Node - ou melhor, é possível (e recomendado, o ponto inteiro) codificar de maneira não-bloqueadora.
Por exemplo, este exemplo foi fornecido em um livro que estou lendo de uma maneira assíncrona para obter dados de um banco de dados.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
O que acontece (como eu o entendo) é que o Node faz a chamada para o banco de dados e continua processando o que quer que seja o próximo na pilha de chamadas. Quando a solicitação do banco de dados for concluída, a variável de dados na função de retorno de chamada anônima será preenchida e essa função adicionada à pilha de chamadas (e subsequentemente executada quando o Node chegar a ela).
Minha pergunta é: o que exatamente está processando a solicitação do banco de dados? Certamente o Node precisa bloquear enquanto faz isso? O que está cuidando da solicitação do banco de dados? Ou, se o Node estiver aguardando uma solicitação HTTP GET assíncrona para um recurso externo, o que está cuidando dessa solicitação que permite que o Node continue processando a pilha de chamadas e seja "sem bloqueio"?
net
pacote quando o http não está disponível.