gpt4 book ai didi

multithreading - 如何找到每个 future 在 Scala 中花费的时间?

转载 作者:行者123 更新时间:2023-12-04 21:41:52 24 4
gpt4 key购买 nike

我有一个同时运行多个 future 的 Scala 代码。我想分析执行它们所花费的时间。
例如:

for (i <- 1 to 100) {
val f = future { runAndTime(doSomething()) }
f.onComplete {
case Success(timeTaken) => println(timeTaken)
case Failure(t) => println(t.getMessage())
}
}
runAndTime 的简单实现可能:
   def runAndTime(func: => Unit) = {
var time = System.currentTimeMillis()
func
System.currentTimeMillis() - time
}

这个问题 runAndTime是当线程没有执行时(例如,如果在 func 中间它从 cpu 中出队并且其他一些线程开始运行)系统仍在流逝,所以我们没有在那个特定线程上花费时间但是线程开始和线程结束之间的总体时间差。

我该如何写 runAndTime这将计算 future 在 CPU 中实际执行的时间?

最佳答案

您可以使用 ThreadMXBean获取当前线程在CPU上花费的累计时间,就像currentTimeMillis (更像 nanos)但考虑到 cpu 调度。它不能保证在所有 JVM 上都存在,但大多数标准实现都可以访问它(我认为它会在不可用时抛出)。

  import java.lang.management.ManagementFactory

def runAndTime(f: => Unit) = {
val start = ManagementFactory.getThreadMXBean.getCurrentThreadCpuTime
f
ManagementFactory.getThreadMXBean.getCurrentThreadCpuTime - start
}

关于multithreading - 如何找到每个 future 在 Scala 中花费的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com