Entre las funciones de temporización, time
, clock
getrusage
, clock_gettime
, gettimeofday
y timespec_get
, quiero entender con claridad cómo se aplican y cuáles son sus valores de retorno con el fin de conocer la situación en la que tengo que usarlos.
Primero debemos clasificar las funciones que devuelven valores de reloj de pared en comparación con las funciones que devuelven valores de proceso o subprocesos . gettimeofday
Devuelve el valor del reloj de pared, clock_gettime
devuelve el valor del reloj de pared o proceso o valores hilos en función del Clock
parámetro pasado a ella. getrusage
yclock
devolver valores del proceso.
Luego, la segunda pregunta se refiere a la implementación de estas funciones y, como consecuencia, su precisión. Qué mecanismo de hardware o software utiliza estas funciones.
Parece que getrusage
usa solo la marca del núcleo (generalmente 1 ms de largo) y, como consecuencia, no puede ser más precisa que el ms. ¿Es correcto? Entonces, la getimeofday
función parece utilizar el hardware subyacente más preciso disponible. Como consecuencia, su precisión suele ser el microsegundo (no puede ser más debido a la API) en hardware reciente. ¿Qué pasa clock
, la página del manual habla de "aproximación", qué significa? ¿Qué pasa si clock_gettime
la API está en nanosegundos, significa que puede ser tan precisa si el hardware subyacente lo permite? ¿Qué pasa con la monotonicidad?
¿Hay alguna otra función?
clock_gettime
, de ahí el uso degettimeofday()
ser un poco más versátil queclock_gettime()