【问题标题】:Performance of setTimeout in node?节点中setTimeout的性能?
【发布时间】:2016-10-28 09:40:46
【问题描述】:

对于我的 web 应用程序,我将需要在任何给定点同时运行许多超时,可能在 10,000-100,000 左右。我想知道这个函数的扩展性如何。

我不需要它那么准确,大部分准确在 10-100 毫秒内。让一个函数在某个时间间隔内运行(例如,每 50 毫秒运行一次),检查当前日期时间与保存的日期时间,如果是则调用该函数会更好吗?

有没有人对 setTimeout 的底层实现有任何见解,并且可以阐明它可以在多大程度上被整体使用?

我有更多问题:有谁知道一次可以运行多少次超时的限制?此外,对于这两种方法,我担心没有足够的时间来处理每个间隔的每个超时,并且在及时触发超时功能方面它会“落后”。

【问题讨论】:

标签: javascript node.js settimeout scalability


【解决方案1】:

实际上,您无法确定超时之间的确切间隔,因为它所做的只是在阈值之后将您的回调推送到回调队列,并且当事件循环将获得该回调时,推送到调用堆栈并执行它 - 是非-确定性。间隔也是如此。您可能会出现一种情况,例如,5 个回调将一个接一个地执行,没有延迟。这是javascript))

【讨论】:

    【解决方案2】:

    评论太长了。

    可能在 10,000-100,000 左右

    让我们考虑一下这意味着什么。假设每个排队的回调需要大约 10 毫秒才能运行,而您将其中的 50,000 个排队等待在 50 毫秒内运行。一次只能运行一个。因此,当事件循环检查是否该运行第 1000 个回调时,整整 10 秒已经过去。当您到达第 50,000 次回调时,已经整整十分钟了!现在很明显,如果您的队列回调花费几分之一毫秒,那么两个数量级的下降会使数学变得不那么令人沮丧一点,但如果他们必须执行任何 I/O,这可能不会发生工作,但无论如何它都可能无法工作,至少对于还必须为客户提供服务的 web 应用来说是这样。

    【讨论】:

    • 这都是猜测。你真的不知道这是不是真的。
    • @Liam 是的,我知道,这就是为什么我以“评论太长”开头的原因,否则我会把它作为评论发布。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多