【发布时间】:2022-01-23 12:31:29
【问题描述】:
我正在开发一项服务。目前我需要为每个请求获取本地时间,因为它涉及系统调用,成本太高。
在我的情况下,像 200 毫秒这样的偏差对我来说是可以的。
那么维护存储local_hour 的变量并每200 毫秒更新一次的最佳方法是什么?
static int32_t GetLocalHour() {
time_t t = std::time(nullptr);
if (t == -1) { return -1; }
struct tm *time_info_ptr = localtime(&t);
return (nullptr != time_info_ptr) ? time_info_ptr->tm_hour : -1;
}
【问题讨论】:
-
您如何确定它“涉及系统调用”?在 linux 上 gettime 是在用户空间中实现的。
-
程序启动时启动一个计时器线程,根据需要随时检查小时,并将结果存储在
std::atomic_uint。其他线程可以从那里读取缓存的值。 -
我不确定这是否是优化的正确位置。在我的旧电脑上,每秒可以运行大约 15M (= 15*10^6)
std::chrono::system_clock::now()。 -
你能假设计算机是不动的吗?或者它可能从一个时区旅行到另一个时区?该服务是否需要一次保持几个月或更长时间?在这种情况下,您需要考虑政治家在程序启动后更改时区规则,并在无需重启即可更新时区数据库的平台上运行。
标签: c++ optimization time system-calls