我想要从午夜开始的纳秒数,以最低的延迟。
我的平台是带有Clang的Linux/Centos 7。I不关心的可移植性。
我找到了这个 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
但他们再次使用了一个分部。有什么更快的吗,避免模数和除法?
我认为最快的方法是:
中。
发布于 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协议),在这个阶段,您尝试估计两台计算机的时间源之间的初始差异,然后进行监视/跟踪(试图补偿任何长期漂移)。
https://stackoverflow.com/questions/58905600
复制相似问题