【发布时间】:2019-11-17 21:58:02
【问题描述】:
我想获取自午夜以来的当前纳秒数,延迟最低。
我的平台是带有 Clang 的 Linux/Centos 7。我不关心可移植性。
我找到了这个<chrono> struct,
但它们除以秒/毫秒等以获得结果。
我还发现这个可以修改为纳秒:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
}
https://stackoverflow.com/a/10499119/997112
但他们再次使用除法。 有什么更快的方法,避免模数和除法?
我认为最快的方法是:
- 抓紧时间
- 多个小时、分钟、秒乘以必要的纳秒,然后将当前的纳秒数加到总数中
?
【问题讨论】:
-
我记得上次我这样做的时候,有一个内核配置选项可以从 CPU 的时基寄存器完全在用户空间中为
gettimeofday()提供服务。如果您担心分割,也许您可以存储原始值并稍后处理? -
现在整数除法不是很快吗?你为什么这么担心?
-
@marko 我会使用 rdtsc() 但我将 now() 与自午夜以来为纳秒的数据包时间戳进行比较。
-
@user997112:处理这些消息所花费的时间可能会使整数除法相形见绌。为什么你特别需要纳秒?
-
@user997112:另外,从午夜开始的时间很重要吗?因为只要用户重置系统时钟,“午夜”就会发生变化。或更改时区。仅供参考:
gettimeofday肯定需要超过 60 个周期。
标签: c++ linux performance time