Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
Wśród funkcji czasowychtime
, clock
getrusage
, clock_gettime
, gettimeofday
itimespec_get
, Chcę jasno zrozumieć, jak są one wdrażane i jakie są ich wartości zwrotne, aby wiedzieć, w jakiej sytuacji muszę ich użyć.
Najpierw musimy sklasyfikować funkcje powracającewartości zegara ściennego porównaj z funkcjami powracającymiwartości procesu lub wątków. gettimeofday
zwraca wartość zegara ściennego,clock_gettime
zwraca wartość zegara ściennegolub wartości procesu lub wątków w zależności odClock
parametr przekazany do niego.getrusage
iclock
zwracaj wartości procesowe.
Następnie drugie pytanie dotyczy realizacji tych funkcji, aw konsekwencji ich dokładności. Który mechanizm sprzętu lub oprogramowania korzysta z tych funkcji.
Wygląda na to żegetrusage
używa tylko kleszcza jądra (zwykle 1ms) iw konsekwencji nie może być bardziej dokładny niż ms. Czy to jest poprawne? A późniejgetimeofday
wydaje się, że funkcja korzysta z najbardziej dokładnego dostępnego sprzętu. W konsekwencji jego dokładność jest zazwyczaj mikrosekundą (nie może być większa z powodu interfejsu API) na ostatnim sprzęcie. Co powiesz naclock
, strona man mówi o „przybliżeniu”, co to znaczy? Co powiesz naclock_gettime
, API jest w nanosekundie, czy to znaczy, że może być tak dokładne, jeśli pozwala na to podstawowy sprzęt? A co z monotonicznością?
Czy są jakieś inne funkcje?