关于时钟精度/准确度的声明是什么意思?

时间:2011-03-02 16:22:32

标签: precision clock system-clock

我已经看过很多关于系统时钟的讨论。例如,标准PC时钟Windows精确度仅为+/- 10ms,而在实时系统中,时钟具有亚毫秒精度。但这些说法意味着什么呢?该时序可变性的重要程度完全取决于测量时钟时序的间隔。如果两个连续的时钟调用返回的时间戳相差10ms,那将是一场灾难,幸运的是情况并非如此;但是如果时钟在一个月内仅损失/增加10ms,那么这几乎是任何实际目的的完美时机。要以不同的方式提出问题,如果我进行两次相隔1秒的时钟调用,我可以预期会出现多大程度的不准确度,例如标准PC-Windows,PC实时(例如,带有支持它的mb的QNX),以及一台Mac?

2 个答案:

答案 0 :(得分:1)

您的问题可能会引发更多讨论。当你在谈论测量时钟的时间间隔时,我认为这称为漂移。如果来自两个连续时钟调用的时间戳相差10ms,可能需要很长时间才能处理,可能会有一个中断,可能时钟确实漂移很差,也许报告精度以10ms为单位,可能存在舍入误差系统时钟的报告精度取决于其速度(即1GHz = 1ns),硬件支持和OS支持。抱歉,我不知道Windows与Mac的对比情况。

答案 1 :(得分:0)

由于您没有链接到关于此主题的任何特定讨论,因此我只能从Java端转发我对此主题的一点经验:

经典System.currentTimeMillis()粒度在前一段时间相当糟糕(在Windows XP上为15毫秒)。这意味着任何两个不返回相同值的相邻System.currentTimeMillis()调用之间的最小可能差异为15ms。因此,如果您测量的事件需要8毫秒,那么您将 0ms或15ms。

用于测量显然是灾难性的小时间跨度。为了测量更长的时间跨度,这不是一个真正的问题。

这是Java引入System.nanoTime的主要原因之一,其中专门旨在测量小时间跨度和通常(即操作系统支持时)有一个显着更精细的粒度(在我测试它的所有系统上,它从未返回相同的值两次,即使连续两次调用而没有计算n)。

因此,现代计算机 通常可以提供非常细粒度且非常精确的时间测量,提供您使用正确的API。