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

Mar*_*o36 5 asynchronous node.js

问题标题基本上说明了一切,但重新表述一下:
如果主(且唯一)线程忙于运行主代码块,什么处理异步函数执行?

到目前为止,我只发现异步代码在其他地方或主线程之外执行,但这具体意味着什么?

编辑:提议的Node.js 事件循环问题的答案也可能解决这个主题,但我正在寻找一个更简单、更具体的答案,而不是对 Node.js 概念的解释。此外,它不会出现在任何类似于“节点异步单线程”的搜索中。

编辑,@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);  
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 5

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

请注意,这也是为什么如果设计不当,您可能会在自己的代码中阻止处理。如果您的代码运行复杂的任务并且移交工作,您将阻塞单个线程。

这是我能做出的最简单的答案,我认为您评论中的链接已很好地解释了详细信息。