【发布时间】:2013-01-25 13:14:07
【问题描述】:
我不是 Node 程序员,但我对单线程非阻塞 IO 模型的工作原理很感兴趣。 看完understanding-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 模型 简单的方法?如果您能帮助我,我将不胜感激。 :)
【问题讨论】:
标签: node.js