Tôi không phải là lập trình viên Node, nhưng tôi quan tâm đến cách hoạt động của mô hình IO đơn luồng không chặn . Sau khi tôi đọc bài viết về sự hiểu biết về bài viết -the-node-js-event-loop , tôi thực sự bối rối về nó. Nó đã đưa ra một ví dụ cho mô hình:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Que: Khi có hai yêu cầu A (đến trước) và B vì chỉ có một luồng duy nhất, chương trình phía máy chủ sẽ xử lý yêu cầu A trước tiên: thực hiện truy vấn SQL là chờ lệnh I / O chờ. Và chương trình bị kẹt khi I/Ochờ và không thể thực thi mã làm cho trang web phía sau. Chương trình sẽ chuyển sang yêu cầu B trong thời gian chờ đợi? Theo tôi, vì mô hình luồng đơn, không có cách nào để chuyển đổi một yêu cầu từ một yêu cầu khác. Nhưng tiêu đề của mã ví dụ nói rằng mọi thứ chạy song song ngoại trừ mã của bạn .
(PS Tôi không chắc liệu tôi có hiểu nhầm mã hay không vì tôi chưa bao giờ sử dụng Node.) Làm thế nào Node chuyển A sang B trong khi chờ đợi? Và bạn có thể giải thích mô hình IO không chặn luồng đơn của Node một cách đơn giản không? Tôi sẽ đánh giá cao nếu bạn có thể giúp tôi. :)
