我们在Java中有一些使用nanoTime进行内部基准测试的过程(因为它应该在同一个线程中准确)。
流程可以在它们之间进行通信。
有没有一种标准的方法来确定线程之间的nanoTime差异? (例如,模仿NTP?)。这应该定期吗?
答案 0 :(得分:3)
javadoc使用很多警告来限定nanoTime()方法。它的要点似乎是你可以在一段代码中使用它来测量经过的时间,给你“纳秒精度,但不一定是纳秒精度”。
这是一种毛茸茸的语言,可能是刻意的。我可能会避免比较使用nanoTime()进行的两次不同的经过时间计算,它可能会给你带来不好的结果。
如果这是用于基准测试,那么在循环中对相同的代码进行基准测试可能是一个更好的想法,将经过的时间带到毫秒范围内,允许您使用currentTimeMillis(),这样更可靠。
答案 1 :(得分:0)
我不建议将其用于基准测试。一个原因是它的表现有点不为人知,例如:在多处理器机器上的Windows上,它可能非常慢。
关于同步和值本身,在Windows上,即使在不同的处理器上,也可以保证同步值。窗口增量也是恒定的。由于支持这些属性,因此检索该值非常昂贵。
在Linux上,处理器之间没有同步,此外,当CPU频率发生变化时(例如,由于省电),增加率会有所不同。
在Solaris上类似于Linux,除了保证下一个nanoTime是> = last nanoTime。