System.nanoTime(): Adakah Ia Benar-Benar Tidak Berguna?
Kebimbangan yang dibangkitkan tentang System.nanoTime() berpunca daripada persepsi bahawa pada sistem berbilang teras, pengukuran masa boleh menghasilkan keputusan yang tidak dijangka disebabkan oleh variasi dalam pembilang masa khusus CPU. Adalah berteori bahawa benang yang dijadualkan ke pemproses berbeza dengan pembilang yang lebih rendah boleh menghasilkan perbezaan masa negatif apabila mengira masa yang dibelanjakan.
Mengatasi Percanggahan Kaunter
Walau bagaimanapun, bertentangan dengan andaian, System.nanoTime() memastikan konsistensi merentas pemproses. Sistem pengendalian moden dan abstraksi perkakasan (mis., HAL) telah menangani isu yang dibangkitkan dalam siaran asal.
Windows:
Pada sistem Windows, versi Matahari yang lebih baharu JDK (pra-2011) menggunakan Windows' QueryPerformanceCounter dan bukannya TSC. QueryPerformanceCounter menjamin masa yang disegerakkan merentas pemproses, menghapuskan kebimbangan percanggahan balas.
Linux:
Inti Linux 2.6.18 dan seterusnya menangani isu ini dengan mengesan masa yang tidak disegerakkan dan kembali ke pangkalan masa yang tidak disegerakkan sumber jam yang boleh dipercayai. Perlindungan ini memastikan pengekalan masa yang konsisten merentas berbilang pemproses.
Platform Lain:
Maklumat adalah terhad mengenai gelagat System.nanoTime() pada platform lain (mis., SPARC , Solaris, IBM JVM). Walau bagaimanapun, adalah munasabah untuk mengandaikan bahawa sistem pengendalian moden dan JVM telah melaksanakan perlindungan yang sama untuk mengekalkan ketekalan masa.
Kesimpulan:
Walaupun kebimbangan asal yang dibangkitkan mungkin adalah sah dalam konteks sejarah tertentu, System.nanoTime() tidak lapuk. Sistem pengendalian moden dan JVM telah melaksanakan perlindungan untuk memastikan pengukuran masa yang boleh dipercayai merentas berbilang pemproses. Oleh itu, System.nanoTime() kekal sebagai alat yang berharga untuk mengukur masa berlalu dalam aplikasi Java.
Atas ialah kandungan terperinci Adakah System.nanoTime() Masih Relevan dalam Sistem Berbilang Teras Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!