Node.js如何同时异步和单线程?

时间:2018-09-18 12:15:17

标签: node.js asynchronous

问题标题基本上说明了所有内容,但请改写一下:
如果主线程(和唯一线程)占用了主代码块,那么处理异步函数执行的是什么?
< br /> 到目前为止,我只发现异步代码在主线程的其他地方外部处执行,但这具体意味着什么?

编辑:提出的Node.js Event loop问题的答案可能也解决了该主题,但是我一直在寻找一个不太复杂,更具体的答案,而不是Node.js概念的解释。而且,它在搜索“节点异步单线程”之类的内容时不会显示。

EDIT,@ Mr_Thorynque:运行查询以从数据库获取数据并将其记录到控制台。没有记录任何内容,因为Node处于异步状态,不会等待查询完成并填充数据。 (这仅是示例,并非我的问题的一部分)

var = data;
mysql.query(`SELECT *some rows from database*`, function (err, rows, fields) {
        rows.forEach(function(row){
        data += *gather the requested data*
    });
});
console.log(data);  

1 个答案:

答案 0 :(得分:1)

真正的结果是,节点进程(单线程)将工作交给了“其他”。这可能是OS的I / O进程,网络资源或其他任何东西。通过移交它,它释放了线程以继续处理内存中的下一件事情。它使用文件句柄来跟踪任何未完成的工作,并在事件循环中将两者重新结合在一起,并在工作完成后触发回调。

请注意,这也是 的一个原因,如果设计不当,您就可以在自己的代码中阻止处理。如果您的代码运行复杂的任务,并且放弃工作,那么您将阻塞单个线程。

这是我能做的一个简单的答案,我认为您的评论中的链接已经很好地解释了细节。