我们的应用程序中有一个线程经常调用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(<ime);
localtime_r(<ime, &newtime);
}
}
编译并运行命令时间./a.out,时区为亚洲/上海或America / New_York。
两种情况都没有设置TZ。在配置文件后我发现localtime_r总是在将时区设置为shanghai时调用__tzset_parsetz,这会导致性能差异。
有没有人知道原因?顺便说一下,我将服务器上的时区重置为 下列。 ln -sf / usr / share / zoneinfo / America / New_York / etc / localtime