¿Podría explicar la diferencia entre CLOCK_REALTIME
y CLOCK_MONOTONIC
relojes devueltos por clock_gettime()
en Linux?Diferencia entre CLOCK_REALTIME y CLOCK_MONOTONIC?
¿Cuál es una mejor opción si necesito calcular el tiempo transcurrido entre las marcas de tiempo producidas por una fuente externa y la hora actual?
Por último, si tengo un daemon NTP que ajusta periódicamente el tiempo del sistema, ¿cómo interactúan estos ajustes con cada uno de CLOCK_REALTIME
y CLOCK_MONOTONIC
?
Tenga en cuenta que en los núcleos más nuevos, CLOCK_MONOTONIC_RAW está disponible, lo que es aún mejor (sin ajustes NTP). –
@JosephGarvin, por algún valor de "mejor", quizás - CLOCK_MONOTONIC_RAW puede correr rápido o lento en tiempo real en varios (o varios cientos) partes por millón, y su velocidad puede variar debido a condiciones ambientales como temperatura o voltaje (o robar tiempo en máquinas virtuales). En una máquina que funciona correctamente, NTP hace todo lo posible para mitigar todos esos factores y, por lo tanto, CLOCK_MONOTONIC refleja más fielmente el * verdadero * tiempo transcurrido. – hobbs
De acuerdo, podría ser interesante tener un CLOCK_MONOTONIC_PARBOILED afectado por los esfuerzos del NTP para corregir los errores de frecuencia, pero no afectado por sus esfuerzos para corregir errores de fase, pero eso es una gran complejidad para una ganancia dudosa :) – hobbs