Rumah > Java > javaTutorial > teks badan

Adakah `System.nanoTime()` Benar-benar Boleh Dipercayai untuk Pengukuran Masa dalam Persekitaran Berbilang teras?

Susan Sarandon
Lepaskan: 2024-11-12 20:32:02
asal
420 orang telah melayarinya

Is `System.nanoTime()` Truly Reliable for Time Measurement in Multi-core Environments?

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan