CLOCK_REALTIME
dipengaruhi oleh NTP, dan dapat bergerak maju dan mundur. CLOCK_MONOTONIC
tidak, dan maju dengan satu tik per tik.
Buku Robert Love Pemrograman Sistem LINUX Edisi ke-2 , secara khusus membahas pertanyaan Anda di awal Bab 11, hal 363:
Aspek penting dari sumber waktu monoton BUKAN nilai saat ini, tetapi jaminan bahwa sumber waktu meningkat secara linier, dan karenanya berguna untuk menghitung perbedaan waktu antara dua pengambilan sampel
Meskipun demikian, saya yakin dia berasumsi bahwa proses berjalan pada instance OS yang sama, jadi Anda mungkin ingin menjalankan kalibrasi berkala agar dapat memperkirakan penyimpangan.
CLOCK_REALTIME
mewakili tebakan terbaik mesin untuk jam dinding saat ini, waktu hari ini. Seperti yang dikatakan Ignacio dan MarkR, ini berarti CLOCK_REALTIME
dapat melompat maju dan mundur saat jam waktu hari sistem diubah, termasuk oleh NTP.
CLOCK_MONOTONIC
mewakili waktu jam dinding mutlak yang telah berlalu sejak beberapa titik tetap yang berubah-ubah di masa lalu. Ini tidak terpengaruh oleh perubahan pada jam waktu sistem.
Jika Anda ingin menghitung waktu yang telah berlalu antara dua peristiwa yang diamati pada satu mesin tanpa intervensi reboot, CLOCK_MONOTONIC
adalah pilihan terbaik.
Perhatikan bahwa di Linux, CLOCK_MONOTONIC
tidak mengukur waktu yang dihabiskan dalam penangguhan, meskipun menurut definisi POSIX seharusnya. Anda dapat menggunakan CLOCK_BOOTTIME
khusus Linux untuk jam monoton yang terus berjalan selama penangguhan.
Kutipan POSIX 7
POSIX 7 menentukan keduanya di http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:
CLOCK_REALTIME
:
Jam ini mewakili jam yang mengukur waktu nyata untuk sistem. Untuk jam ini, nilai yang dikembalikan oleh clock_gettime() dan ditentukan oleh clock_settime() mewakili jumlah waktu (dalam detik dan nanodetik) sejak Epoch.
CLOCK_MONOTONIC
(fitur opsional):
Untuk jam ini, nilai yang dikembalikan oleh clock_gettime() mewakili jumlah waktu (dalam detik dan nanodetik) sejak titik yang tidak ditentukan di masa lalu (misalnya, waktu mulai sistem, atau Zaman). Poin ini tidak berubah setelah waktu start-up sistem. Nilai jam CLOCK_MONOTONIC tidak dapat disetel melalui clock_settime().
clock_settime()
memberikan petunjuk penting:sistem POSIX dapat mengubah CLOCK_REALITME
secara sewenang-wenang dengan itu, jadi jangan mengandalkan itu mengalir baik terus menerus maupun maju. NTP dapat diimplementasikan menggunakan clock_settime()
, dan hanya dapat memengaruhi CLOCK_REALTIME
.
Implementasi kernel Linux tampaknya mengambil waktu boot sebagai zaman untuk CLOCK_MONOTONIC
:Titik awal untuk CLOCK_MONOTONIC