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