我不是 Node 程序员,但我对单线程非阻塞 IO 模型的工作原理很感兴趣。在我阅读了理解-the-node-js-event-loop的文章后,我真的很困惑。它为模型提供了一个示例:
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();
}
);
问:当有两个请求A(先来)和B,因为只有一个线程,服务器端程序会先处理请求A:做SQL查询是休眠语句,等待I/O。并且程序一直处于I/O
等待状态,无法执行渲染网页的代码。程序会在等待期间切换到请求 B 吗?在我看来,由于单线程模型,没有办法将一个请求从另一个请求切换。但是示例代码的标题表明除了您的代码之外的所有内容都是并行运行的。
(PS我不确定我是否误解了代码,因为我从未使用过Node。)Node如何在等待期间将A切换到B?并且能简单的解释一下Node的单线程非阻塞IO模型吗?如果您能帮助我,我将不胜感激。:)