Wśród funkcji czasowych, time
, clock
getrusage
, clock_gettime
, gettimeofday
i timespec_get
, chcę jasno zrozumieć, w jaki sposób są one realizowane i jakie są ich wartości zwracane w celu poznania, w którym sytuacja muszę ich używać.Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
Najpierw musimy zaklasyfikować funkcje wracające ściennego zegara wartościami porównać do funkcji powracających proces lub nitek ceni. gettimeofday
zwraca wartość zegara ściennego, clock_gettime
zwraca wartość zegara ściennego lub wartości procesów lub wątków w zależności od przekazanego do niego parametru Clock
. getrusage
i clock
zwracają wartości procesowe.
Następnie drugie pytanie dotyczy realizacji tych funkcji, aw konsekwencji ich dokładności. Z jakiego mechanizmu sprzętu lub oprogramowania korzystają te funkcje.
Wygląda na to, że getrusage
używa tylko znacznika jądra (zwykle o długości 1 ms), aw konsekwencji nie może być dokładniejszy niż ms. Czy to jest poprawne? Następnie funkcja getimeofday
wydaje się używać najdokładniejszego dostępnego sprzętu bazowego. W konsekwencji jego dokładność jest zwykle mikrosekundą (nie może być większa z powodu API) na ostatnim sprzęcie. Co o clock
, strona man mówi o "przybliżeniu", co to znaczy? A co z clock_gettime
, interfejs API znajduje się w nanosekundzie, co oznacza, że może być tak dokładny, jeśli pozwala na to sprzęt podrzędny? A co z monotonicznością?
Czy są jeszcze jakieś inne funkcje?
masz teraz 18 punktów rep ;-) –
Mac OS X nie posiada 'clock_gettime', stąd użycie [ 'gettimeofday()'] (http://www.songho.ca/misc/timer/timer.html) jest nieco bardziej wszechstronny niż 'clock_gettime()' – bobobobo
@bobobobo Zgadzam się, że OS X nie ma clock_gettime (), jednak gettimeofday() niestety mierzy czas zegara ściennego. Zaktualizowałem swój post, aby podać te informacje. Jeśli wystarczająca jest precyzja ms, polecam getrusage() jako najlepszy zegar do użycia jako timer. –