NodeJS:调用异步函数时谁做异步工作

NodeJS: Who does the asynchronous work when a async function is called?

本文关键字:异步 工作 函数 调用 NodeJS      更新时间:2023-09-26

我将用例子来解释我的问题。

fs.readFile('somefilename', function(err, data) {
    ...doSomething...
});

执行此行代码后readFile将开始读取文件。无论成功还是失败,此回调都将被推送到队列中,以便使用适当的参数执行。

读取文件asynchronously发生,但如果 NodeJS 是单线程的、非阻塞的,谁在这样做呢?

用户代码在单个线程中执行。然而,在幕后,nodejs 使用 libuv/libio 来处理任何使用线程的 io。

https://github.com/libuv/libuv

有趣的帖子:
单线程非阻塞 IO 模型在 Node 中的工作原理.js
node.js 是否在内部使用线程/线程池?
为什么 Node.js 是单线程的?

Node.js是一个事件驱动的服务器。这并不意味着它使用多线程。

作为事件驱动的,Node.js可以同时处理多个请求。基本上,当它收到请求时,Node.js 会启动其执行。在执行时,Node.js 收到另一个请求,它将启动其执行。等等。当第一个请求完成执行并且结果可用时,它会触发一个事件,通知 Node.js 此请求已完成,然后 Node.js 发回请求结果。

更多信息可以在 Node.js 网站上找到,更多信息可以在这里找到。