gpt4 book ai didi

c++ - 减少gettimeofday时间的策略?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:57 26 4
gpt4 key购买 nike

我写了一个stat server来统计每天的访问数据,所以我每天都要清理db(memcached)中的数据。

目前,我会调用 gettimeofday 获取日期,并将其与缓存的日期进行比较,以检查是否经常有同一天。

示例代码如下:

void report_visits(...) {
std::string date = CommonUtil::GetStringDate(); // through gettimeofday
if (date != static_cached_date_) {
flush_db_date();
static_cached_date_ = date;
}
}

问题是我必须每次调用gettimeofday客户端报告访问信息。而且 gettimeofday 比较耗时。

这个问题有什么解决办法吗?

最佳答案

gettimeofday 系统调用(现在已过时,取而代之的是 clock_gettime)是执行时间最短的系统调用之一。我上次测量是在 Intel i486 上,持续了大约 2us。内核内部版本用于为网络数据包添加时间戳,readwritechmod 系统调用更新文件系统 inode 中的时间戳,以及类似。如果你想测量你在 gettimeofday 系统调用中花费了多少时间,你只需要做几对(越多越好)调用,一个紧接着另一个,注释它们之间的时间戳差异最后得到样本的最小值作为适当的值。这将是理想值的一个很好的近似值。

想一想,如果内核使用它来为您对文件执行的每次读取 操作添加时间戳,您就可以自由地使用它为每个服务请求添加时间戳,而不会受到严重的惩罚。

另一件事,不要使用(如其他响应所建议的那样)将 gettimeofday 结果转换为字符串的例程,因为这确实会消耗更多资源。您可以比较时间戳(假设它们是 t1t2)并且,

gettimeofday(&t2, NULL);
if (t2.tv_sec - t1.tv_sec > 86400) { /* 86400 is one day in seconds */
erase_cache();
t1 = t2;
}

或者,如果您希望它在每天的同一时间发生

gettimeofday(&t2, NULL);
if (t2.tv_sec / 86400 > t1.tv_sec / 86400) {
/* tv_sec / 86400 is the number of whole days since 1/1/1970, so
* if it varies, a change of date has occured */
erase_cache();
}
t1 = t2; /* now, we made it outside, so we tie to the change of date */

甚至,你可以为此使用 time() 系统调用,因为它有第二个分辨率(你不需要处理 usecs 或 的开销struct timeval 结构)。

关于c++ - 减少gettimeofday时间的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31695775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com