Javascript node.js的setTimeout替代方案 客观的

Javascript node.js的setTimeout替代方案 客观的,javascript,node.js,timer,npm,Javascript,Node.js,Timer,Npm,了解是否有更准确的替代方法来替代node.js中的 背景 在制作QPS(每秒查询数)测试程序的过程中,我发现使用setTimeout越不准确,我需要等待的值越小 例如,如果我调用setTimeout(fn,1),我不会精确等待1ms,而是随机等待一段时间,尽可能接近1ms。Node.js文档清楚地说明了这一点: 回调可能不会在适当的延迟内被调用 毫秒。Node.js不保证 当回调将启动时,也不考虑它们的顺序。回调将是 在尽可能接近指定时间的情况下调用 从 实际上,这意味着等待2、3甚至4毫秒,而

了解是否有更准确的替代方法来替代node.js中的

背景 在制作QPS(每秒查询数)测试程序的过程中,我发现使用
setTimeout
越不准确,我需要等待的值越小

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

回调可能不会在适当的延迟内被调用 毫秒。Node.js不保证 当回调将启动时,也不考虑它们的顺序。回调将是 在尽可能接近指定时间的情况下调用

实际上,这意味着等待2、3甚至4毫秒,而实际上我只需要等待1毫秒

总之,
setTimeout
的使用是不可预测的,如其他问题所述:

  • 该库声称它比
    setTimeout
    更快、更轻,但无法确认,因为项目中的文档已从GitHub中删除,我认为该包已被放弃,因为自2012年以来没有向其添加任何更新或注释

    问题
  • node.js
    setTimeout
    是否有准确的替代方案

  • 这主要是受事件循环、回调队列和处理能力支配的结果。如果您希望在某个特定的时刻执行,也许您应该考虑在一个不是围绕优化异步操作构建的替代环境中进行开发

    最接近1ms的调用是
    setImmediate()
    process.nextTick()
    。但是,这两种方法都不允许您指定延迟,并且您仍将受事件循环的支配,但是,您不需要等待下一个循环迭代进行处理


    你应该看报纸。如果在阅读之后,您认为Node在其核心中提供的任何功能都不够精确,那么我会考虑使用不同的语言/框架。

    您的目标是在特定的时间间隔(如1ms)执行函数吗?我的目标是等待1ms并执行函数FN,因此您是正确的!您可以使用
    节点调度
    来实现这一点,因为NodeJ是单线程、事件驱动的,并且计时器是非抢占式的,由于nodejs可能在那个确切的时刻正在运行其他的东西,因此无法保证计时器将在预定的时间运行,并且它必须等到其他活动完成后,才能为下一个事件提供服务。如果您想要的东西总是那么精确,那么您可能需要一种具有真实线程的不同类型的环境,在这种环境中,计时器可以在中断驱动模式或自己的线程中被调度时准确地运行。