首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从午夜开始,以最低的延迟获得纳秒

从午夜开始,以最低的延迟获得纳秒
EN

Stack Overflow用户
提问于 2019-11-17 21:58:02
回答 1查看 369关注 0票数 2

我想要从午夜开始的纳秒数,以最低的延迟。

我的平台是带有Clang的Linux/Centos 7。I不关心的可移植性。

我找到了这个 struct,但是它们除以秒/毫秒等来得到结果。

我还发现它可以修改为纳秒:

代码语言:javascript
复制
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

但他们再次使用了一个分部。有什么更快的吗,避免模数和除法?

我认为最快的方法是:

  • 现在获取时间
  • 乘以所需的纳秒数、分钟秒数,然后将当前的纳米数添加到整个

中。

EN

回答 1

Stack Overflow用户

发布于 2019-11-17 23:41:41

没有提供纳秒计数器的硬件,因此提供其他功能的硬件(例如:( "CPU周期“)必须由软件在某处使用和缩放。

Linux上的clock_gettime()函数将为您缩放到纳秒。更重要的是(取决于安全性和性能折衷),这可以完全在用户空间中完成,从而避免调用内核API的开销(内核API的开销可能比微不足道的部分高出至少10倍)。

然而,在这些尺度上,你需要对你真正想要的东西非常具体。例如,在闰秒期间所期望的是什么?2台计算机可能不同意,因为其中一台被配置为涂抹闰秒,而另一台则没有。

另一个例子是:如果您想要计算延迟(例如"latency = current_time_at_receiver - time_packet_says_it_was_sent"),那么两台计算机可能不同步(例如,发送方的时钟比接收者的时钟落后几秒,因此延迟最终为负值);要处理这个问题,您可能需要一个培训阶段(有点像NTP协议),在这个阶段,您尝试估计两台计算机的时间源之间的初始差异,然后进行监视/跟踪(试图补偿任何长期漂移)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58905600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档