通常、時間は OS レイヤーによって言語ランタイムに提供されます。そのため、Windows 環境でコンパイルされた C/C++ プログラムを実行している場合、Windows OS に時間を尋ねています。Linux ボックスの JVM で実行されている Java プログラムを実行している場合、Java プログラムは JVM から時刻を取得し、JVM は Linux から時刻を取得します。ブラウザーで JavaScript として実行している場合、Javascript ランタイムはブラウザーから時間を取得し、ブラウザーは OS から時間を取得します。
下位レベルでは、OS の時間はハードウェア層の経過クロック サイクルに基づいており、BIOS または OS で設定したルート時間と比較されていると思います。
いくつかのオタクの詳細で更新されました:
さらに抽象化すると、コンピュータが 1 GHz の場合、それは CPU が 1/1Billion( 10 -9 ) 秒ごとに「状態」を変更することを意味します (+ 電圧から - 電圧への 1 回の遷移とその逆の期間)。コンピュータ内のすべてがこれらの遷移に基づいているため、マザーボードにはハードウェア タイマーがあり、これらの遷移が一定の頻度で発生するようにします。これらのハードウェア タイマーは非常に正確であるため、使用する Calendar 時間の抽象化に関する重要な時間を「カウント」するための基礎となります。
私はハードウェアの専門家ではありませんが、これは、コンピューター アーキテクチャの授業や学校での基本的な回路の構築から得た最良の理解です。
あなたの編集に基づいて明確にする:
プログラムは、実行速度が遅いか速いかを本質的に「認識」していないため、それ自体で時間の経過を正確に追跡する方法はありません。一部の言語では、OS から「サイクル カウント」や「プロセッサ速度」などの情報にアクセスできるため、時間 API を使用しなくても、それに基づいて時間の経過をある程度表現できます。しかし、それでさえ、あなたの質問の制約を考えると一種の不正行為です.