2012-05-02 102 views
2

这不是一个严格的作业问题,而是一个分支。编程,应用程序和操作系统的时间精度

时间函数是如何在面向对象的语言中实现的,还有像C这样的命令式语言?如果您要获得纳秒级的时间戳并将其转换为字符串,是不是总是不准确?

事实上,只要您对计时数据进行任何计算或处理,是不是现在对某种未知程度的不准确?这个假设是否正确?

您可以很轻松地解决网络延迟问题,但是甚至在发送数据之前在本地怎么办?似乎到目前为止,每个人都问到的结论是时间函数从来不是完全准确的 - 这只是一个可接受的错误。

本质上,我问的是如何实现真实世界的时间应用程序?

+0

也许你可以给出一个“真实世界的时间应用程序”的例子,这将显着受延迟几个处理器周期的影响? – deceze

+0

Linux的ntpd守护进程?制导系统? – atx

回答

1

其实就是功课!

我们称之为time的是进步。很久以前,事情 甚至没有数字。只是旅行的太阳和旅行中的星星给了一个关于时间的暗示 。后来,特别是自数字革命开始以来,Numbers 被分配到time。 进展时间随着数字的增加而增加。对于所有不同的格式,我都没有多说,我说这些方案中的大部分在当时确实有一个orgin。例如,Unix epoche 是1970年1月1日00:00:00 UTC的时间。当然,这不是时间的开始,但是选择这些虚拟起源以将数字拟合成合理的数据结构。 Back to you question:我们能捕捉当前时间吗?不,我们不会,我们永远不会。读取任何时钟将告诉我们光线离开时钟到达我们眼睛的时间。这可能是非常少的,但... 当有人问我们的时间,我们很高兴地告诉。但是,再次发生一些延迟,我相信我们会在不增加延迟的情况下同时告知。

了解物理过程后,我们可以延长光线到达我们的眼睛,延迟我们的大脑需要的时间,延迟我们说出的话语将需要达到要求的人的耳朵。

但是..........

那么现实世界的时间应用程序如何实现呢?没有THAT TIME。时间取决于你在哪里,时间取决于围绕着你的重力,时间取决于你的速度,等等。

但是.........

这不是因为时间流逝而发生的事情。不,时间让事情发生!

Again back to your question:通常在软件问题上,时间问题基本上是关于进度和/或同步的问题。你想比较一下。 基本上有两种可能的calls给提供这种进程的资源,称为timefirst call将在您拨打电话时返回time。但是你需要考虑到你会在稍后得到结果。所以你得到的时间有点过去了。 second call返回呼叫返回的time。这是一个稍微不同的实现,因为这样的函数必须知道它自己的服务需要多长时间。这可能只适用于某些校准。

这是两个主要调用。

当涉及到resolution(再次回到你的问题),我想排除选择有一个原子钟连接到您的计算机。假设您是现成的超市电脑 的拥有者。它可能运行在几GHz。您可能观察到的最高频率可能是CPU频率。比如说4GHz,这样的频率会导致计数器在纳秒内增加4倍,即250皮秒的时间分辨率。所以一般来说你可能会说有亚纳秒的分辨率。在实践中,常用的高频计数器在MHz范围内,这将给出100ns单位范围内的分辨率。

但是......

这些高频率可以用作时间的标尺吗?短期内他们可以!但从长远来看,它要复杂得多,因为这些时间源必须与常见时间源(例如PC时间)锁相。高频计数器确实存在明显的错误,这将导致许多美国的相位漂移。这只能通过小心校准来克服。适当的校准可以允许将高频计数器锁相到系统时间。

一旦您在几微秒范围内准确的时间源,您可以以不同的方式诊断代码的行为,因为您可以预测潜在的延迟。

总结(哲学方法):

  1. 时间,使事情发生。
  2. 时间is永真,或者表示真值
  3. 考虑与时间相关的任何值表示在过去
  4. 时间有没有这样的事情actual time在实践
  5. 最后,当你说:Time can never be completely accurate (什么都可以!)

仔细看看Windows的高分辨率时间服务的实现可以找到Windos Timestamp Project

相关问题