Tôi đang học NodeJS và chỉ muốn làm rõ điều gì đó. Trong một số hướng dẫn và sách giới thiệu cho đến nay, từ rất sớm họ đã mô tả kiến trúc "không chặn" của Node - hay đúng hơn là có thể (và được khuyến nghị, toàn bộ điểm) để viết mã theo cách không chặn.
Vì vậy, ví dụ, ví dụ này đã được đưa ra trong một cuốn sách tôi đang đọc về một cách không đồng bộ để lấy dữ liệu từ cơ sở dữ liệu.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
Điều xảy ra (theo tôi hiểu) là Node thực hiện cuộc gọi đến cơ sở dữ liệu, sau đó tiếp tục xử lý bất cứ điều gì có thể tiếp theo trên ngăn xếp cuộc gọi. Khi yêu cầu cơ sở dữ liệu hoàn tất, biến dữ liệu trong hàm gọi lại ẩn danh sẽ được điền và hàm đó được thêm vào ngăn xếp cuộc gọi (và sau đó được thực thi khi Node đến nó).
Câu hỏi của tôi là, chính xác những gì đang xử lý yêu cầu cơ sở dữ liệu? Chắc chắn Node phải chặn trong khi nó làm điều đó? Điều gì đang chăm sóc yêu cầu cơ sở dữ liệu? Hoặc nếu Node đang chờ một yêu cầu HTTP GET không đồng bộ với tài nguyên bên ngoài, thì điều gì quan tâm đến yêu cầu đó cho phép Node tiếp tục xử lý ngăn xếp cuộc gọi và "không chặn"?
net
gói khi http không có sẵn.