какой из них быстрее, getimeofday или clock_gettime? - PullRequest
1 голос
/ 10 июля 2010

Я хочу сохранить время события. Я нашел эти две функции, но не знаю, какая из них быстрее.

Ответы [ 5 ]

4 голосов
/ 10 июля 2010
int main()
{
    struct timespec tp;
    struct timeval tv;
    int i=0;
    int j=0;
    for(i=0; i < 500000; i++)
    {
        gettimeofday(&tv, NULL);
        j+= tv.tv_usec%2;
        clock_gettime(CLOCK_HIGHRES, &tp);
        j+=tp.tv_sec%2;
    }
    return 0;

}



 %Time Seconds Cumsecs  #Calls   msec/call  Name
  68.3    0.28    0.28  500000      0.0006  __clock_gettime
  22.0    0.09    0.37  500000      0.0002  _gettimeofday
   7.3    0.03    0.40 1000009      0.0000  _mcount
   2.4    0.01    0.41       1     10.      main
   0.0    0.00    0.41       4      0.      atexit
   0.0    0.00    0.41       1      0.      _exithandle
   0.0    0.00    0.41       1      0.      _fpsetsticky
   0.0    0.00    0.41       1      0.      _profil
   0.0    0.00    0.41       1      0.      exit

Это работало на коробке Solaris 9 v440. Профилируйте код на вашем собственном ящике. Этот результат полностью отличается от результата, указанного в приведенной ранее ссылке. Другими словами, если есть разница, это будет связано с имплементацией.

3 голосов
/ 10 июля 2010

Это будет зависеть от вашей системы;Там нет стандарта для которого быстрее.Я предполагаю, что они оба примерно одинаковой скорости.gettimeofday более традиционный и, вероятно, будет хорошим выбором, если вы хотите, чтобы ваш код переносился на старые системыclock_gettime имеет больше возможностей.

2 голосов
/ 12 июля 2010

Вам все равно.

Если вы звоните одному из них достаточно часто, чтобы это имело значение, вы делаете это неправильно.

Код профиля, который вызывает определенные проблемы с производительностьюи проверь сколько времени там проводит.Если это слишком много, рассмотрите возможность рефакторинга, чтобы вызывать функцию реже.

0 голосов
/ 25 сентября 2016

В зависимости от константы, используется в clock_gettime().Для самых быстрых часов есть CLOCK_*_COARSE константы.Эти таймеры самые быстрые, но не точные.

gettimeofday() должен возвращать то же, что и clock_gettime(CLOCK_REALTIME)

Кроме того, результаты тестов зависят от архитектуры (для Linux).Так как в Linux есть специальная технология (VDSO) для устранения системных вызовов, чтобы получить время.Эти технологии не работают на архитектуре X86-32bit.См. strace вывод.

0 голосов
/ 10 июля 2010

Посмотрите на это обсуждение . Он кажется хорошего качества и очень тесно связан с тем, что вы можете искать, хотя и немного устарел.

...