実は宿題!
私たちが呼ぶものはtime
進歩します。遠い昔、その物には数字すらありませんでした。旅する太陽と旅する星だけが時間のヒントを与えていました。その後、特にデジタル革命の開始以来、番号は に割り当てられましたtime
。進行時間は、数字の増加に伴います。さまざまなフォーマットについてはあまり言及しませんが、これらのスキームのほとんどには当時の起源があると述べています。たとえば、Unix エポシェは 1970 年 1 月 1 日の 00:00:00 UTC です。もちろん、これは時間の始まりではありませんが、そのような仮想原点は、数値を妥当なデータ構造に適合させるために選択されています。
Back to you question:
現在の時刻を取得できますか? いいえ、できません。時計を読むと、光が時計を離れて私たちの目に向かった時刻がわかります。ほんの少しかもしれませんが... 誰かが私たちに時間を尋ねてきたら、私たちは喜んで教えます。しかし、やはり多少の遅延が発生し、遅延を追加せずに同じ時間を伝えると確信しています.
物理学を知っていれば、光が目に届くまでの遅延、脳にかかる遅延、話し言葉が尋ねられた人の耳に届くまでに必要な遅延を追加できます。
しかし..........
では、実世界時間アプリケーションはどのように実装できるのでしょうか? ありませんTHAT TIME
。時間はあなたがいる場所に依存し、時間はあなたを取り囲む重力に依存し、時間はあなたの速度に依存します.
しかし.........
時間が経ったから起こっているのではありません。いいえ、時間が物事を実現させます!
Again back to your question:
一般に、ソフトウェアの問題では、時間に関する問題は基本的に進行状況や同期に関する問題です。何かと比較したい。基本的にcalls
、 と呼ばれるこの進行状況を提供するリソースには 2 つの可能性があります。 は、呼び出しを行った時点でを返しtime
ます。ただし、後で結果が得られることを考慮する必要があります。したがって、取得している時間はやや過去のものです。は、呼び出しが戻る を返します。このような関数は、それ自体のサービスに必要な時間について何かを知る必要があるため、これはわずかに異なる実装です。これは、何らかのキャリブレーションを行った場合にのみ可能になる可能性があります。first call
time
second call
time
これらは 2 つの主要な呼び出しです。
(再び質問に戻る) ということになるresolution
と、コンピュータに原子時計を接続するオプションを除外したいと思います。あなたが既製のスーパー マーケット コンピューターの所有者であると仮定しましょう。数 GHz で動作する場合があります。観察できる最高の周波数は、CPU 周波数である可能性があります。たとえば 4GHz の周波数では、カウンターは 1 ナノ秒 (250 ピコ秒) 内に 4 回インクリメントします。したがって、一般的にサブナノ秒の解像度があると言えます。実際には、一般的に使用される高周波カウンターは MHz 範囲にあり、100ns 単位範囲の分解能が得られます。
しかし.......
これらの高周波は、時間の定規として使用できますか? 短期的にはできる!しかし、長期的には、これらのタイム ソースは、たとえば PC 時間などの一般的なタイム ソースとフェーズ ロックする必要があるため、はるかに複雑になります。高周波カウンターには、多くの us/s の位相ドリフトを引き起こす重大な誤差があります。これは、慎重なキャリブレーションによってのみ克服できます。適切なキャリブレーションにより、高周波カウンターをシステム時間に位相ロックすることができます。
数マイクロ秒範囲の精度でタイム ソースを取得すると、潜在的なレイテンシを予測できるため、コードの動作をまったく異なる方法で診断できます。
要約すると(哲学的アプローチ):
- 時間は物事を実現させます。
- 時間
is
は決して真ではないか、真の値を表します
- 時間に関連すると見なされる値は、過去の時間を表します
actual time
実務上そんなことない
- 最後に、あなたが言っているように:
Time can never be completely accurate
(何もできません!)
Windows 用の高解像度タイム サービスの実装の詳細については、Windos Timestamp Projectを参照してください。