Javascript Node.js非阻塞函数返回后的回调处理
我正在读一本Node.js的书,试图弄清楚Node.js是如何处理事件、异步函数及其回调、非阻塞I/O等的。下面是我如何理解事件循环基础知识的简要概述,然后是一些我在书中找不到明确答案的问题。如果我的基本理解有什么错误,请纠正我。然后问题就来了 据我所知,Node.js在单个线程上运行所有功能。这包括事件循环。换句话说,当事件发生时,例如HTTP请求,该请求进入事件队列。事件循环本身一次从队列中提取一个事件,并对其进行整体处理。这可能意味着立即返回一个简单的结果,或者在向第三方(如数据库或文件系统)进行I/O的情况下,进行一个非阻塞的异步调用,并使用回调来告诉系统在异步函数完成时要做什么。同时,队列中的所有其他事件正在等待。如果开发人员编写的方法不异步卸载工作或不向工作人员卸载工作,则在处理任务时整个服务器将挂起 如果有任何错误,请澄清,因为这可能会影响我对以下问题答案的理解,我希望这些问题不要太愚蠢Javascript Node.js非阻塞函数返回后的回调处理,javascript,node.js,asynchronous,nonblocking,Javascript,Node.js,Asynchronous,Nonblocking,我正在读一本Node.js的书,试图弄清楚Node.js是如何处理事件、异步函数及其回调、非阻塞I/O等的。下面是我如何理解事件循环基础知识的简要概述,然后是一些我在书中找不到明确答案的问题。如果我的基本理解有什么错误,请纠正我。然后问题就来了 据我所知,Node.js在单个线程上运行所有功能。这包括事件循环。换句话说,当事件发生时,例如HTTP请求,该请求进入事件队列。事件循环本身一次从队列中提取一个事件,并对其进行整体处理。这可能意味着立即返回一个简单的结果,或者在向第三方(如数据库或文件系
回忆起各种来源,我阅读了一段时间 Node.js并不完全是单线程的。它将磁盘、数据库、HTTP API调用卸载到其他线程,这些线程一旦完成,就会将其回调排入事件循环队列
我是凭记忆写的。如果这对您有帮助,我可以尝试查找参考资料。首先,从以下内容开始: 短语“Node.js是单线程的”有点误导人,在技术上是不正确的。对于代码中的所有意图和目的,代码都是单线程的,但节点本身不是。在节点中有一些API和操作(通常是异步I/O完成的),它们将在内核或LibUV的线程池中使用不同的线程 现在按每个问题的顺序将其分解:
function add(a, b, cb) { cb(a + b) }
async.whilst(
function() { return true },
function(cb) { add(1 + 1, cb) },
function() { console.log('Done!') }
)