Среди временных функций, time
, clock
getrusage
, clock_gettime
, gettimeofday
и timespec_get
я хочу , чтобы четко понять , как они реализуются , и каковы их возвращаемые значения для того , чтобы знать , в какой ситуации я должен использовать их.
Сначала нам нужно классифицировать функции, возвращающие значения настенных часов, по сравнению с функциями, возвращающими значения процессов или потоков . gettimeofday
возвращает значение настенных часов, clock_gettime
возвращает значение настенных часов или значения процесса или потоков в зависимости от Clock
переданного ему параметра. getrusage
и clock
вернуть значения процесса.
Тогда второй вопрос касается реализации этих функций и, как следствие, их точности. Какой аппаратный или программный механизм использует эти функции.
Кажется, что getrusage
используется только тик ядра (обычно 1 мс) и, как следствие, не может быть более точным, чем мс. Это правильно? Тогда getimeofday
функция, кажется, использует самое точное из доступных аппаратных средств. Как следствие, его точность обычно составляет микросекунду (не может быть больше из-за API) на новейшем оборудовании. Как насчет clock
man-страницы, которая говорит о «приближении», что это значит? Как насчет clock_gettime
API в наносекунде, значит ли это, что он может быть настолько точным, если базовое оборудование это позволяет? Как насчет монотонности?
Есть ли другие функции?
clock_gettime
, поэтому использованиеgettimeofday()
немного более универсальным, чемclock_gettime()