【问题标题】:Worst case operating system clock precision?最坏情况下的操作系统时钟精度?
【发布时间】:2010-12-28 06:12:46
【问题描述】:

我不确定这个问题是否属于 StackOverflow,但在这里。

我需要使用 C# 为一些要从一方传输到另一方的数据生成时间戳,并且我需要知道所有操作系统(Windows、Linux 和 Unix)中系统时钟的最坏情况精度是多少)?我需要的是弄清楚所有操作系统都能够验证这个时间戳的精度。

例如,Windows Vista 操作系统的时钟分辨率约为 10-15 毫秒。

【问题讨论】:

  • 你说的是系统时钟吗?还是“系统时钟”? MB 上的时钟通常具有亚毫秒级的分辨率。您可以通过许多测试来判断,但其中一个是 Console.Writeline(System.DateTime.Now.Ticks);Thread.Sleep(100);Console.Writeline(System.DateTime.Now.Ticks); - 差异将远大于 100 毫秒。
  • 我说的是“系统时钟”,因为它必须足够通用,以便所有操作系统都能够验证时间戳。

标签: c# operating-system timestamp timing clock


【解决方案1】:

您是否希望为数据生成类似unix timestamp 的内容?或者找到一个不会与现有文件冲突的时间戳?如果是后者,您总是可以使用刻度。

任何“长”时间戳的问题在于,它将与生成它的机器相关,但不能保证在其他系统上不会发生冲突,因为时钟可以设置不同(不是浮动,但实际上设置不同) .

如果数据是安全/敏感的,并且您正在寻找一种基于时间的密钥同步机制 (ALA Kerberos),我不建议您自己动手,因为有许多障碍需要克服,尤其是在同步方面系统并保持同步。

【讨论】:

  • 我使用时间戳来表示数据从一方传输到另一方的时间,它不必是唯一的。所以,我不是在寻找不会与现有文件冲突的时间戳。
  • 那么我会选择 Ticks,因为它应该给你足够的分辨率,它干净直接(它是一个长值)并且可以很容易地重组为 DateTime。如果客户端是非 .NET,Unix 时间戳也是一个不错的选择。
【解决方案2】:

有趣。主要操作系统在最坏的情况下都具有厘秒分辨率(0.01 秒),尽管它通常以更高的精度嵌入。

Linux 在其时间戳中提供高达微秒的分辨率(请参阅man utime),具体取决于计算机的时钟硬件。 Windows NT/Win2K/XP/等。在文件时间戳中提供毫秒精度(仅使用 NTFS),尽管它以0.000 000 1 秒为单位(每秒一千万)考虑所有系统时间戳。

如果系统之间需要精确的精确的时间分辨率,GPS 接收器可以轻松实现 100 纳秒的精度,如side effect of how they work,而许多廉价型号也可以达到 10 ns。 Special GPS models 使导出的时间可供外部使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2018-04-06
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2021-09-27
    相关资源
    最近更新 更多