用于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年以来没有更新或注释被添加。
问题
- 有没有准确的替代node.js
setTimeout
?
这主要是由于事件循环,callback队列和处理能力所造成的。 如果您希望确切而准确,那么您可能应该考虑在不是围绕优化asynchronous操作而构build的替代环境中进行开发。
最接近1ms的调用将是setImmediate()
和process.nextTick()
。 然而,这些都不允许你指定一个延迟,你只能在事件循环的支配下工作,但是你不需要等待下一个循环迭代的处理。
您应该阅读定时器和事件循环的Node.js指南 。 如果在阅读之后,你不认为Node在核心中提供的东西是足够精确的,那么比我使用不同的语言/框架进行研究。