这不是一个严格意义上的家庭作业问题,而是一个分支。
时间函数是如何在面向对象语言和命令式语言中实现的?如果您要获取一个以纳秒为单位的时间戳,并将其转换为字符串,那么时间不是总是不准确吗?
事实上,只要您对计时数据进行任何计算或工作,它现在是不是在某种程度上不准确?这个假设是正确的吗?
您可以很容易地解决网络延迟问题,但是在数据发送之前的本地情况又如何呢?到目前为止,似乎每个被问到的人都得出了这样的结论:时间函数永远不会完全准确--这只是公认的不准确。
从本质上讲,我问的是真实世界的应用程序是如何实现的?
发布于 2012-07-14 16:51:16
实际上是家庭作业!
我们称之为time
的东西是进步的。很久以前,这个东西甚至连数字都不带。只有行进中的太阳和行进中的星星给出了时间的提示。后来,特别是在数字革命开始后,数字被分配给了time
。随着时间的推移,数字也在不断递增。我不想说太多关于所有不同格式的内容,但我要说明的是,这些方案中的大多数都有一个特定的时间来源。例如,Unix纪元是世界标准时间1970年1月1日的00:00:00。当然,这不是时间的开始,但选择这样的虚拟来源是为了将数字适应合理的数据结构。Back to you question:
我们能捕获当前时间吗?不,我们不会,我们永远也不会。读任何一个时钟都会告诉我们光离开时钟到达我们眼睛的时间。可能很少但是..。当有人问我们时间时,我们很高兴地告诉你。但是,再一次出现了一些延迟,我相信我们可以在不增加延迟的情况下知道相同的时间。
知道了物理学,我们可以加上光线到达我们眼睛的延迟,我们的大脑所经历的延迟,以及我们所说的话到达被问及的人的耳朵所需的延迟。
但..
那么,如何实现一个真实的应用程序呢?没有THAT TIME
。时间取决于你在哪里,时间取决于你周围的重力,时间取决于你的速度,以此类推。
但是......
事情并不是因为时间流逝而发生的。不,时间会让事情发生!
Again back to your question:
通常在软件问题中,关于时间的问题基本上是关于进度和/或同步的问题。你想拿某样东西作比较。基本上,提供此进度的资源有两种可能的calls
,称为time
:first call
将在您进行调用时返回time
。但你需要考虑到你会在稍后得到结果。所以你得到的时间有点像过去了。second call
返回调用返回的time
。这是一个稍微不同的实现,因为这样的函数必须知道它自己的服务需要多长时间。这可能只有通过一些校准才能实现。
这是两个主要的调用。
当谈到resolution
(再次回到您的问题)时,我想排除将原子钟连接到您的计算机的选项。让我们假设您拥有一台现成的超市电脑。它可能以几个GHz的速度运行。您可能观察到的最高频率可能是cpu频率。在比方说4 4GHz,这样的频率将使计数器在纳秒内递增4倍,即250皮秒的时间分辨率。所以一般来说,你可能会说有亚纳秒级的分辨率。在实践中,常用的高频计数器在MHz范围内,这将给出100 In单位范围内的分辨率。
但是......
这些高频可以用作时间的标尺吗?在短期内,他们可以做到!但从长远来看,这要复杂得多,因为这些时间源必须与常见的时间源进行相位锁定,例如您的pc时间。高频计数器确实有很大的误差,这将导致许多微秒/秒的相位漂移。这只能通过仔细校准来克服。适当的校准可以允许将高频计数器锁相到系统时间。
一旦你有了一个精确到几微秒的时间源,你可能会以完全不同的方式诊断你的代码的行为,因为你可以预测潜在的延迟。
总结(一种哲学方法):
is
从不为真或表示真值actual time
(什么都不能!)在Windos Timestamp Project上可以更仔细地了解Windows高分辨率时间服务的实现。
https://stackoverflow.com/questions/10412961
复制