Entre as funções de temporização, time
, clock
getrusage
, clock_gettime
, gettimeofday
e timespec_get
, eu quero entender claramente como eles são implementados e quais são os seus valores de retorno a fim de saber em que situação eu tenho que usá-los.
Primeiro, precisamos classificar as funções que retornam valores de relógio de parede e comparar as funções que retornam valores de processos ou threads . gettimeofday
retornos valor parede do relógio, clock_gettime
retorna valor relógio de parede ou de processo ou valores de fios dependendo do Clock
parâmetro transmitido ao mesmo. getrusage
e clock
retornar valores do processo.
Em seguida, a segunda pergunta diz respeito à implementação dessas funções e, como conseqüência, à sua precisão. Qual mecanismo de hardware ou software essas funções usam.
Parece que getrusage
usa apenas o tick do kernel (geralmente 1ms de comprimento) e, como conseqüência, não pode ser mais preciso que o ms. Está certo? Em seguida, a getimeofday
função parece usar o hardware subjacente mais preciso disponível. Como conseqüência, sua precisão é geralmente o microssegundo (não pode ser mais por causa da API) no hardware recente. E clock
a página de manual fala sobre "aproximação", o que isso significa? E clock_gettime
a API está em nanossegundos? Isso significa que ela pode ser tão precisa se o hardware subjacente permitir? E a monotonicidade?
Existem outras funções?
clock_gettime
, portanto, o uso degettimeofday()
ser um pouco mais versátil do queclock_gettime()