在C++/boost中,用*nix检索时间的最高效的方法是什么
What is the most performant way to retrieve time in *nix in C++/boost?
我知道这个问题有太多的变量,无法有一个单一的答案,但如果您能帮助我了解选项,我将不胜感激。
我的应用程序需要从网络接收大量事件,并且需要在每条消息上至少以毫秒的分辨率"标记"到达时间,以便稍后根据这些时间戳进行大量计算。
我过去的经验告诉我,以高速率获得时钟时间是一个性能杀手,因为它们转化为系统/内核调用。在C++中的Unix环境中是否存在"不太糟糕的选项"?
作为一个起点,我现在使用"boost::posix_time::microsec_clock::local_time()"
,它达到了微秒分辨率(我不需要),这给了我一个绝对时间(原则上,我可以对任何历元进行相对偏移)。
我最好的选择是什么?
我不能说哪个更快,但你有没有想过你到底需要什么样的时间?
clock(3)
:CPU滴答……对性能测试很有用,但对网络调用或时间戳的计时不有用clock_gettime(3)
CLOCK_MONOTONIC
:不可更改的时间…对定时网络呼叫很有用gettimeofday(2)
:墙时间…对时间戳和性能测试很有用
确保你选择的任何时间方法都符合你的需求。
以下内容以微秒为单位获取时间戳(您认为这对您来说太多了)。调整除法/乘法很容易得到微秒:
const uint32_t getTime()
{
struct timeval tv;
struct timezone tz;
struct tm *tm;
gettimeofday(&tv, &tz);
tm = localtime(&tv.tv_sec);
return (tm->tm_hour * 3600000000/*3600 * 1000 * 1000*/) +
(tm->tm_min * 60000000/*60 * 1000 * 1000*/) +
(tm->tm_sec * 1000000/*1000 * 1000*/) +
(tv.tv_usec);
}
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用VerQueryValue检索应用程序的文件描述
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 我需要帮助来缩短检索 SSL 证书的执行时间
- C++-需要读取存储在文件(.txt)中的时间戳并正确检索
- boost::p osix_time:使用夏令时检索时间
- 正在RTP/RTP中检索时间戳
- 使用 WinHttp 函数检索 HTTP 文件的时间戳
- 在C++/boost中,用*nix检索时间的最高效的方法是什么
- 从c++中的系统命令检索ping时间(ping x.x.x.x-n)
- 使用ctime检索时间,包括时区