我有一个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
的问题在于,当线程在该特定线程中花费时间但在线程启动和线程结束之间的总时间差 .
如何编写 runAndTime
,它将计算未来在CPU中实际执行的时间?
1 回答
您可以使用
ThreadMXBean
来获取当前线程在CPU上花费的累计时间,就像currentTimeMillis
(更像是nanos)但是考虑到cpu调度 . 它's not guaranteed to be on all JVM'但是大多数标准实现都可以访问它(我认为如果不可用它会抛出) .