4

我们在 Java 中有一些进程使用 nanoTime 进行内部基准测试(因为这在同一个线程中应该是准确的)。

进程可以在它们之间进行通信。

是否有确定线程之间纳米时间差异的标准方法?(例如,模仿 NTP?)。这应该定期进行吗?

4

2 回答 2

3

javadoc 使用大量警告来限定 nanoTime() 方法。它的要点似乎是您可以在代码块中使用它来测量经过的时间,从而为您提供“纳秒精度,但不一定是纳秒精度”。

那是毛茸茸的语言,可能是故意的。我可能会避免比较使用 nanoTime() 进行的两种不同的经过时间计算,这可能会给你带来不好的结果。

如果这是为了进行基准测试,最好在循环中对相同的代码进行基准测试,将经过的时间提高到毫秒范围内,从而允许您使用 currentTimeMillis() 代替,这样更可靠。

于 2009-06-29T18:44:59.550 回答
0

我不建议将其用于基准测试。一个原因是它的性能有些未知,例如在多处理器机器上的 Windows 上它可能非常慢。

关于同步和值本身,在 Windows 上,即使在不同的处理器上,您也可以保证具有同步的值。在 Windows 上,增量速率也是恒定的。由于支持此类属性,因此检索该值的成本很高。

在 Linux 上,处理器之间没有同步,此外,随着 CPU 频率的变化(例如,因为省电),增加率可能会有所不同。

在 Solaris 上,除了保证下一个 nanoTime >= last nanoTime 之外,它与 Linux 类似。

于 2012-03-14T22:02:14.913 回答