我不是Node程序员,但是我对单线程无阻塞IO模型的工作方式感兴趣。在阅读了理解理解节点事件循环文章之后,我对此感到非常困惑。它给出了该模型的示例:
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吗?我认为,由于是单线程模型,因此无法将一个请求与另一个请求进行切换。但是示例代码的标题表明,除了您的代码之外,所有其他内容都可以并行运行。
(由于我从没使用过Node,所以我不确定我是否会误解代码。)在等待期间,Node如何将A切换到B?您能否以简单的方式解释Node的单线程无阻塞IO模型?如果您能帮助我,我将不胜感激。:)
