为什么localtime_r在设置不同的时区时表现如此不同

时间:2013-09-12 02:56:45

标签: linux timezone glibc

我们的应用程序中有一个线程经常调用localtime_r。我们发现从系统(Redhat 6,)将时区从America / New_york更改为Asia / Shanghai时,线程性能下降了20%。在配置文件之后,我们发现它是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);
    }
}

编译并运行命令时间./a.out,时区为亚洲/上海或America / New_York。

  1. 亚/上海
    真实0m1.838s
    用户0m1.628s
    sys 0m0.206s
  2. 美国/纽约
    真实0m0.608s
    用户0m0.395s
    sys 0m0.211s
  3. 两种情况都没有设置TZ。在配置文件后我发现localtime_r总是在将时区设置为shanghai时调用__tzset_parsetz,这会导致性能差异。

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

0 个答案:

没有答案