【问题标题】:Queue order of node.js callbacksnode.js 回调的队列顺序
【发布时间】:2018-08-07 14:21:38
【问题描述】:

回调是在异步 I/O 过程开始后就以某种“陈旧”状态插入回调队列,还是仅在异步 I/O 完成后才排队?

也就是说,如果一个节点服务器运行如下

  1. 启动 I/O #1
  2. 启动 I/O #2
  3. 完成 I/O #2
  4. 完成 I/O #1
  5. 开始事件循环的回调阶段。

哪个回调会先运行?来自 I/O #1 的回调,还是来自 I/O #2 的回调?

已编辑以将数字排序添加到场景中。

【问题讨论】:

    标签: node.js asynchronous io callback


    【解决方案1】:

    据我所知,它仅在异步进程返回数据后运行。将回调视为一个单独的函数,它被传递并仅在一段代码的末尾使用。

    这是大多数 nodeJS 开发人员必须处理的;为异步事件循环带来一些秩序。

    这些回调将运行的顺序完全取决于每个调用方法的处理时间。

    例如,如果回调#1 的方法需要 2.5ms 完成,而回调#2 的方法只需要 1ms。如果您一个接一个地运行这两个方法,那么 Callback#2 将始终首先返回。

    【讨论】:

    • '如果您一个接一个地运行这两个方法,那么 Callback#2 将始终首先返回。'即使两个回调在同一阶段运行也是如此吗? IE。在这种情况下,我对 .000 .. ms 的完成差异更感兴趣。
    • 几乎是的。如果您想延迟其中一个功能的执行,请查看 setImmediate() 方法。它提供了一种注入函数以在稍后阶段运行的方法。如果您想检查 ms 差异,我使用 moment 来捕获回调函数的开始时间和结束时间,然后以 ms 或 us 为单位记录差异。
    • 你能提供这方面的文件吗?因为我想也许我们在谈论两件不同的事情。使用 moment 的问题在于它是一个 JS 包含,我相当肯定这意味着它无法在 I/O 进程完成和回调排队时记录。它可能只能在 I/O 进程排队和回调运行时记录?
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2021-11-10
    • 2018-08-05
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多