gpt4 book ai didi

linux - 为什么设置不同时区时 localtime_r 的性能如此不同

转载 作者:行者123 更新时间:2023-12-05 08:00:14 26 4
gpt4 key购买 nike

我们的应用程序中有一个线程经常调用 localtime_r。我们发现当从系统(Redhat 6,)将时区从 America/New_york 更改为 Asia/Shanghai 时,线程性能下降了 20%。 profile后发现是localtime_r导致的差异。

我还在我们的 HP G8 服务器上做了一个简单的测试。

#include <time.h>
#include <stdio.h>

int main(void)
{
struct tm newtime;
time_t ltime;
char buf[50];
for(int i=0;i<=1000000;i++)
{
ltime=time(&ltime);
localtime_r(&ltime, &newtime);
}
}

编译并运行命令 time ./a.out 后,时区为 Asia/Shanghai 或 America/New_York。

  1. 亚洲/上海
    真实 0m1.838s
    用户 0m1.628s
    系统 0m0.206s
  2. 美国/纽约
    真实 0m0.608s
    用户 0m0.395s
    系统 0m0.211s

两种情况都没有设置 TZ 环境。在配置文件之后,我发现 localtime_r 在将时区设置为上海时总是调用 __tzset_parsetz,这会导致性能差异。

有人知道原因吗?顺便说一下,我将服务器上的时区重置为下列。ln -sf/usr/share/zoneinfo/America/New_York/etc/localtime

最佳答案

尝试设置 TZ。

这里有更多关于它的信息 https://lzone.de/polscan/docs/performance-tz-set.sh.htm

您的情况的差异可能是微不足道的,例如时区文件的 inode 顺序等。

关于linux - 为什么设置不同时区时 localtime_r 的性能如此不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18754584/

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