【问题标题】:What is the maximum number of setTimeout() methods that can be run at the same time usin Node.JS [duplicate]在Node.JS中可以同时运行的setTimeout()方法的最大数量是多少[重复]
【发布时间】:2020-05-23 16:53:37
【问题描述】:

我有一个使用 nodeJS 运行的 java 脚本文件。我正在使用setTimeout() 方法创建一种计时器,它将在用户指定的时间后运行一些代码。由于多个用户将使用此代码,并行运行 1000 个 setTimeout 方法会有问题吗?是否有可以同时运行的最大数量,还是只会让程序运行得越慢?

【问题讨论】:

  • 我不知道有任何硬性限制,我想这更多是您可用内存量的一个因素。
  • 重要提示:setTimeout 调用不会“并行”运行。回调被放置在一个有序队列中(第一个超时优先),并将在触发时间发生时按顺序运行。最大的“成本”是保持调度的回调函数所有来自回调闭包的可达对象活动所需的内存。
  • 在其他 cmets 中,您要求提供更具体的编码建议。为了有能力做到这一点,我们需要查看您现有的代码并准确了解您正在尝试做什么。具体建议需要查看您正在处理的具体问题以及到目前为止您拥有的代码。您会在这里发现,如果您向我们展示您的实际代码,您几乎总能得到更准确和更具体的答案。或者更简洁地说,“这里关于代码的问题应该包括那个代码”。
  • 仅供参考,计时器是 node.js 中非常有效的资源。您可以轻松拥有数百万美元。它们保存在一个有序的桶列表中,其中所有设置为同时触发的计时器都在同一个桶中。 node.js 在事件循环中所做的所有事情都是查看列表开头的计时器时间是否已到。如果是这样,它会触发它并检查列表中的下一个。如果没有,那就什么都不做。创建一个新计时器只需要进行搜索以找出将其插入链接列表的位置。因此,成本最高的操作是在列表中插入一个新计时器。

标签: javascript node.js settimeout


【解决方案1】:

你可以同时拥有多少个setTimeouts 没有硬性限制,你拥有的内存越多,它就会使用更多的内存,但如果你有很多并且准确的时间并不重要,你可能只是想要将事件加载到数组中,并让一个 setInterval 遍历数组并在超时完成时运行它们。

【讨论】:

  • 好的,非常感谢!但是,您能否详细说明我将如何实施您提出的解决方案?我对 JS 很陌生,所以不太确定如何让一个 setInterval 循环遍历数组?
  • 你有一个数组,当你想要超时时,你可以将一个对象推送到该数组,其中包含一个时间和一个函数(如果你想要未来一秒,那么时间可能类似于 Date.now() + 1000 ),然后你有一个每隔一段时间运行一次的间隔,它通过数组,检查 Date.now() 是否大于时间,如果是,它运行函数并从数组中删除对象。跨度>
  • 非常感谢你们!这是我第一次发帖,所以我不知道会发生什么,但你的建议非常棒,我现在知道该怎么做,再次感谢大家!
【解决方案2】:

--如果有一段代码需要执行多次,可以使用 setInterval() 来执行该代码。 setInterval() 将一个函数参数作为第二个参数,该参数将以给定的毫秒延迟运行无限次。

我相信每个用户都有自己设置的超时功能,当他们结束时,他们的请求就会得到满足。设置的超时首先结束的将获得高优先级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多