节点setTimeout性能

Performance of setTimeout in node?

本文关键字:性能 setTimeout 节点      更新时间:2023-09-26

对于我的webapp,我需要在任何给定点上同时运行许多超时,可能在10,000-100,000左右。我想知道的是这个函数有多好。

我不需要精确,大多数精确在10-100毫秒内。让一个函数以一定的间隔(比如,每隔50毫秒运行一次)运行,检查当前日期时间和保存的日期时间,如果是,调用该函数会更好吗?

有没有人对setTimeout的底层实现有任何见解,并且可以阐明它可以如何很好地大规模使用?

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

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

这个注释太长了

可能在10,000-100,000

让我们考虑一下这意味着什么。假设每个排队的回调需要大约10ms的时间来运行,并且您将其中的50,000个回调队列在50ms内运行。一次只能运行一个。因此,当事件循环检查是否该运行第1000个回调时,已经过去了整整10秒。当你进行第5万次回调时,你已经花了整整10分钟了!现在很明显,如果你的队列回调只占用一毫秒的时间,那么两个数量级的下降会使数学稍微不那么令人沮丧,但如果它们必须做任何I/O,这可能不会工作,它可能无论如何都不会工作,至少对于还必须服务客户端的web应用程序来说。