【问题标题】:NodeJS: Who does the asynchronous work when a async function is called?NodeJS:当调用异步函数时,谁在异步工作?
【发布时间】:2016-12-20 16:31:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 异步编程并不一定意味着多线程。
  • 我认为环境(在本例中为 node.js)可以是多线程的。只有 JavaScript 代码是单线程的。
  • @OliverQueen 好的。我的问题是它如何读取文件并同时读取文件以及运行以下代码。

标签: javascript node.js asynchronous


【解决方案1】:

用户代码在单个线程中执行。然而,在幕后 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?

【讨论】:

    【解决方案2】:

    我会亲自向您解释这一点,但 video 会更好地解释 Javascript 事件循环。

    【讨论】:

      【解决方案3】:

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

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

      更多信息请访问Node.js website,更多信息请访问here

      【讨论】:

        猜你喜欢
        • 2020-07-13
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 2020-03-04
        • 2021-07-14
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多