Rumah >Java >javaTutorial >Adakah `System.nanoTime()` Benar-benar Boleh Dipercayai untuk Pengukuran Masa dalam Persekitaran Berbilang teras?
System.nanoTime(): Salah Tanggapan dan Fungsi Sebenar
Ketepatan dan ketekalan System.nanoTime() untuk pengukuran masa telah menjadi topik perbincangan. Kebimbangan telah dibangkitkan mengenai tingkah lakunya dalam persekitaran berbilang teras, di mana bacaan mungkin negatif disebabkan perbezaan balas merentas pemproses.
Walau bagaimanapun, dakwaan asal bahawa System.nanoTime() tidak boleh dipercayai adalah tidak betul. Pada sistem pengendalian moden (termasuk Windows XP SP2 dan lebih baru dan kernel Linux 2.6.18 dan lebih baru), System.nanoTime() dilaksanakan menggunakan mekanisme canggih yang memastikan tingkah laku yang konsisten.
Dalam Windows, API QueryPerformanceCounter yang mendasari ialah digunakan, yang menggunakan sama ada pemasa pengurusan kuasa (PMTimer) atau pembilang cap masa pemproses (TSC) berdasarkan sistem pengendalian dan konfigurasi perkakasan. Walaupun terdapat isu sebelumnya dengan penyegerakan TSC pada sistem SMP dalam Windows XP SP2 dan lebih awal, ini telah ditangani dan QPC kini menyediakan ukuran masa yang boleh dipercayai.
Di Linux, System.nanoTime() biasanya dilaksanakan menggunakan clock_gettime (CLOCK_REALTIME), yang memastikan ketekalan merentas semua pemproses dan teras. Kernel mempunyai mekanisme untuk kembali ke sumber jam yang selamat sekiranya pembilang cap waktu tidak disegerakkan atau berubah-ubah.
Ringkasnya, System.nanoTime() ialah kaedah yang boleh dipercayai dan berguna untuk mengukur selang masa dalam Java moden persekitaran. Kebimbangan tentang perbezaan balas merentas pemproses telah diselesaikan melalui kemajuan dalam sistem pengendalian dan reka bentuk CPU.
Atas ialah kandungan terperinci Adakah `System.nanoTime()` Benar-benar Boleh Dipercayai untuk Pengukuran Masa dalam Persekitaran Berbilang teras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!