Tra le funzioni di temporizzazione, time
, clock
getrusage
, clock_gettime
, gettimeofday
e timespec_get
, voglio capire chiaramente come la loro applicazione e quali sono i loro valori di ritorno in modo da sapere in quale situazione devo usarli.
Per prima cosa dobbiamo classificare le funzioni che restituiscono i valori dell'orologio da parete rispetto alle funzioni che restituiscono i valori di processo o thread . gettimeofday
restituisce valore orologio a muro, clock_gettime
restituisce valore orologio a muro o processo o valori filati seconda del Clock
parametro passato ad esso. getrusage
e clock
restituisce valori di processo.
Quindi la seconda domanda riguarda l'implementazione di queste funzioni e, di conseguenza, la loro accuratezza. Quale meccanismo hardware o software utilizza queste funzioni.
Sembra che getrusage
usi solo il tick del kernel (di solito lungo 1ms) e di conseguenza non può essere più preciso del ms. È giusto? Quindi la getimeofday
funzione sembra utilizzare l'hardware sottostante più accurato disponibile. Di conseguenza la sua precisione è di solito il microsecondo (non può essere più a causa dell'API) sull'hardware recente. Che dire clock
, la pagina man parla di "approssimazione", cosa significa? Che dire clock_gettime
, l'API è in nanosecondi, significa che è in grado di essere così preciso se l'hardware sottostante lo consente? Che dire della monotonicità?
Ci sono altre funzioni?
clock_gettime
, quindi l'uso digettimeofday()
essere un po 'più versatile diclock_gettime()