2012-05-02 98 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

相關問題