用于node.js的setTimeout的替代方法

目的

发现在node.js中是否有更准确的setTimeout替代scheme

背景

在这个过程中,如果制作一个QPS(每秒查询)testing程序,我发现使用setTimeout越来越不准确,我需要等待的值越小。

例如,如果我调用setTimeout(fn, 1) ,我不会等待1ms,而是等待一段随机的时间,即尽可能接近1ms。 Node.js文档清楚地说明了这一点:

callback可能不会在精确的延迟毫秒内被调用。 Node.js没有保证什么时候callback会触发的确切时间,也不保证它们的顺序。 callback将尽可能接近指定的时间。

从https://nodejs.org/api/timers.html#timers_settimeout_callback_delay_arg

实际上这就等于2,3或甚至4ms,实际上我只需要等待1ms。

总之, setTimeout的使用是不可预知的,正如在其他问题中所解释的那样:

  • setTimeout <5 node.js时会发生什么

我尝试了什么?

由于setTimeout对于小值是非常不准确的,所以我需要一个更准确的select。

试图find这个我到处search替代品,但我发现唯一的东西是一个名为perf-timers的库。

这个库声称它比setTimeout更快,更轻,但是无法确认它,因为项目的文档已经从GitHub中删除了,我相信这个软件包已经被放弃了,因为自2012年以来没有更新或注释被添加。

问题

  1. 有没有准确的替代node.js setTimeout

这主要是由于事件循环,callback队列和处理能力所造成的。 如果您希望确切而准确,那么您可能应该考虑在不是围绕优化asynchronous操作而构build的替代环境中进行开发。

最接近1ms的调用将是setImmediate()process.nextTick() 。 然而,这些都不允许你指定一个延迟,你只能在事件循环的支配下工作,但是你不需要等待下一个循环迭代的处理。

您应该阅读定时器和事件循环的Node.js指南 。 如果在阅读之后,你不认为Node在核心中提供的东西是足够精确的,那么比我使用不同的语言/框架进行研究。