System.nanoTime(): 本当に役に立たないのでしょうか?
System.nanoTime() に関して提起された懸念は、次のような認識から生じています。マルチコア システムでは、CPU 固有のタイム カウンタの変動により、時間測定により予期しない結果が生じる可能性があります。より低いカウンタを持つ別のプロセッサにスケジュールされたスレッドは、消費時間を計算する際に負の時間差が生じる可能性があると理論づけられています。
カウンタの不一致への対処
ただし、前提に反して、System.nanoTime() はプロセッサ間の一貫性を保証します。最新のオペレーティング システムとハードウェア抽象化 (HAL など) は、元の投稿で提起された問題に対処しています。
Windows:
Windows システムでは、Sun の新しいバージョンJDK (2011 より前) は、TSC ではなく Windows の QueryPerformanceCounter を使用します。 QueryPerformanceCounter はプロセッサ間での同期時間を保証し、カウンタの不一致の懸念を排除します。
Linux:
Linux カーネル 2.6.18 以降では、非同期のタイムベースを検出してフォールバックすることでこの問題に対処しています。信頼性の高いクロックソース。この安全策により、複数のプロセッサ間で一貫した時刻の維持が保証されます。
その他のプラットフォーム:
他のプラットフォーム (SPARC など) での System.nanoTime() の動作に関する情報は限られています。 、Solaris、IBM JVM)。ただし、最新のオペレーティング システムと JVM は時間の一貫性を維持するために同様の保護を実装していると考えるのが合理的です。
結論:
最初に提起された懸念は次のとおりであった可能性があります。特定の歴史的文脈では有効ですが、System.nanoTime() は廃止されません。最新のオペレーティング システムと JVM には、複数のプロセッサ間で信頼性の高い時間測定を保証するための保護手段が実装されています。したがって、System.nanoTime() は、Java アプリケーションで経過時間を測定するための貴重なツールであり続けます。
以上がSystem.nanoTime() は最新のマルチコア システムにまだ関連していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。