CLOCK_REALTIME
wird von NTP beeinflusst und kann sich vorwärts und rückwärts bewegen. CLOCK_MONOTONIC
nicht, und rückt um einen Tick pro Tick vor.
Robert Loves Buch LINUX System Programming 2nd Edition , befasst sich speziell mit Ihrer Frage am Anfang von Kapitel 11, S. 363:
Der wichtige Aspekt einer monotonen Zeitquelle ist NICHT der aktuelle Wert, sondern die Garantie, dass die Zeitquelle streng linear ansteigend ist und somit nützlich ist, um die Zeitdifferenz zwischen zwei Abtastungen zu berechnen
Das heißt, ich glaube, er geht davon aus, dass die Prozesse auf derselben Instanz eines Betriebssystems ausgeführt werden, sodass Sie möglicherweise eine regelmäßige Kalibrierung durchführen möchten, um die Abweichung abschätzen zu können.
CLOCK_REALTIME
stellt die beste Schätzung der Maschine hinsichtlich der aktuellen Wanduhr und Tageszeit dar. Wie Ignacio und MarkR sagen, bedeutet dies, dass CLOCK_REALTIME
kann vorwärts und rückwärts springen, wenn die Uhrzeit des Systems geändert wird, einschließlich durch NTP.
CLOCK_MONOTONIC
stellt die absolut verstrichene Wanduhrzeit seit einem willkürlichen festen Punkt in der Vergangenheit dar. Es wird nicht von Änderungen in der Systemuhrzeit beeinflusst.
Wenn Sie die verstrichene Zeit zwischen zwei Ereignissen berechnen möchten, die auf einem Computer ohne dazwischenliegenden Neustart beobachtet wurden, CLOCK_MONOTONIC
ist die beste Option.
Beachten Sie, dass unter Linux CLOCK_MONOTONIC
misst nicht die im Suspend verbrachte Zeit, obwohl dies laut POSIX-Definition so sein sollte. Sie können den Linux-spezifischen CLOCK_BOOTTIME
verwenden für eine monotone Uhr, die während des Suspend weiterläuft.
POSIX 7-Anführungszeichen
POSIX 7 spezifiziert beide unter http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:
CLOCK_REALTIME
:
Diese Uhr stellt die Uhr dar, die die Echtzeit für das System misst. Für diese Uhr repräsentieren die von clock_gettime() zurückgegebenen und von clock_settime() spezifizierten Werte die Zeit (in Sekunden und Nanosekunden) seit der Epoche.
CLOCK_MONOTONIC
(optionale Funktion):
Für diese Uhr stellt der von clock_gettime() zurückgegebene Wert die Zeitspanne (in Sekunden und Nanosekunden) seit einem unbestimmten Zeitpunkt in der Vergangenheit dar (z. B. Systemstartzeit oder Epoche). Dieser Punkt ändert sich nach der Systemstartzeit nicht. Der Wert der Uhr CLOCK_MONOTONIC kann nicht über clock_settime() gesetzt werden.
clock_settime()
gibt einen wichtigen Hinweis:POSIX-Systeme können CLOCK_REALITME
beliebig ändern verlasse dich also nicht darauf, dass es weder kontinuierlich noch vorwärts fließt. NTP könnte mit clock_settime()
implementiert werden , und konnte nur CLOCK_REALTIME
betreffen .
Die Linux-Kernel-Implementierung scheint die Startzeit als Epoche für CLOCK_MONOTONIC
zu nehmen :Ausgangspunkt für CLOCK_MONOTONIC