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