【问题标题】:which one faster, getimeofday or clock_gettime?哪个更快,gettimeofday 还是clock_gettime?
【发布时间】:2011-03-14 05:29:28
【问题描述】:

我想存储事件时间。 我找到了这两个函数,但不知道哪个更快。

【问题讨论】:

    标签: c linux datetime time system-calls


    【解决方案1】:

    这取决于您的系统;没有更快的标准。我的猜测是它们通常都具有相同的速度。 gettimeofday 更传统,如果您希望您的代码可移植到旧系统,这可能是一个不错的选择。 clock_gettime 有更多功能。

    【讨论】:

      【解决方案2】:

      看看这个discussion。它看起来质量很好,并且与您可能正在寻找的东西密切相关,虽然有点过时。

      【讨论】:

        【解决方案3】:
        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 机器上运行。在您自己的盒子上配置代码。此结果与之前提供的链接中引用的结果完全不同。换句话说,如果有差异,那将是由于实施。

        【讨论】:

          【解决方案4】:

          你不在乎。

          如果您经常给他们中的任何一个打电话以至于这很重要,那么您做错了。

          导致特定性能问题的配置文件代码并检查它在那里花费了多少时间。如果太多,请考虑重构它以减少调用该函数的频率。

          【讨论】:

          • 如果你这样回答问题,你做错了:-) 也许他想写他自己的分析器?而这些函数本身的执行时间可能会影响它们传递的结果。
          【解决方案5】:

          取决于常数,用于clock_gettime()。对于最快的时钟,有CLOCK_*_COARSE 常量。这些计时器最快,但并不精确。

          gettimeofday() 应该返回与clock_gettime(CLOCK_REALTIME) 相同的结果

          此外,基准测试结果取决于架构(对于 Linux)。由于 Linux 具有特殊技术 (VDSO) 来消除系统调用以获取时间。这些技术不适用于 X86-32 位架构。请参阅strace 输出。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-16
            • 2011-03-26
            • 2012-06-12
            • 2010-09-29
            • 2012-07-15
            • 2011-09-22
            • 2018-10-31
            • 1970-01-01
            相关资源
            最近更新 更多