NodeJS:调用异步函数时,异步工作是谁?

时间:2016-02-11 19:58:27

标签: javascript node.js asynchronous

我将以示例解释我的问题。

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

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

正在读取文件asynchronously,但是如果NodeJS是单线程的,非阻塞的,那么谁在做呢?

3 个答案:

答案 0 :(得分:4)

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

https://github.com/libuv/libuv

有趣的帖子:
How the single threaded non blocking IO model works in Node.js
Does node.js use threads/thread pool internally?
Why is Node.js single threaded?

答案 1 :(得分:0)

我会自己向你解释一下,但这个video可以更好地解释Javascript事件循环。

答案 2 :(得分:0)

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

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

可以在Node.js website上找到更多信息,更多信息可以在here找到。