【问题标题】:Performance.now() in a multi threaded context多线程上下文中的 Performance.now()
【发布时间】:2020-07-31 00:41:41
【问题描述】:

我需要使用网络工作者来进行要求很高的计算。我的代码开头和结尾分别有const t0 = performance.now()const t1 = performance.now()。我想将t1 - t0 报告为执行计算所需的时间。但是如果 web worker 实际运行在另一个线程中,是否意味着它可以被某个调度程序中断?如果是,那么这意味着t1 - t0 可能大于实际计算时间(例如:timeline)...您将如何在 javascript 中测量多线程上下文中的执行时间?提前感谢任何愿意帮助我理解的人。

【问题讨论】:

  • 我只能建议您在知道性能低于要求后才开始分析。
  • 谢谢!但严格来说没有“要求”,这是针对我需要报告特定任务的执行时间的基准测试应用程序。
  • 对于基准测试:多次测量,取最小值。是的,系统负载总是会影响你的时间。没有办法真正避免这种情况。

标签: javascript multithreading web-worker cpu-time time-measurement


【解决方案1】:

DOMHighResTimeStamp API 使用 global monotonic clocks,永远不应暂停甚至限制。

在某些情况下(例如,当背景选项卡)时,用户代理可以选择节气门定时器和周期性回调在该上下文中运行,甚至完全冻结它们。任何此类限制都不应影响单调时钟返回的时间的分辨率或准确性。

因此,只要浏览器本身仍在运行,您就可以确信 performance.now() 将返回自创建 Worker 以来的正确时间。实际上,例如,如果计算机设置为睡眠状态,那么时钟将不再滴答作响。

【讨论】:

  • OP 关注performance.now 测量挂钟时间而不是 CPU 时间。您的回答仅表明它确实可以测量挂钟时间。
  • @Bergi 是什么让你这么认为?他们说他们想把它用作秒表,而不是“挂钟”我的回答指向这种方法的流程:时间戳是相对于工作人员的创建时间,将计算机设置为睡眠将停止时钟(但计算也是如此,所以这应该不是问题)。
  • 不应影响时间的分辨率或准确性”听起来不像是应该在线程休眠时停止时钟
  • @Bergi 我说当计算机进入睡眠状态时。 Here is a related Q/A 如果您有兴趣,请检查我误导 OP 使用性能的 cmets。现在,在我意识到计算机休眠时它实际上会停止之前。日期是唯一不受此影响的时钟,但它可以在运行时更改...
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多