我在几台机器上测试了times()和clock_gettime(CLOCK_MONOTONIC),结果很混乱(用单线程运行每个api 10M次):
Thinkpad P50 Xeon E3-1505Mv5 [Skylake 14nm]:
select tel_num, max(reg_date)
from tel_num
group by tel_num
你可以在Skylake上看到clock_gettime比时间更快。
以下是Xeon E5-2430 [Sandy Bridge 32nm]的结果:
times(NULL) : 450ms
clock_gettime(CLOCK_MONOTONIC): 325ms
次(NULL)现在更快。
我也在旧的Thinkpad W510 I7-720QM上做了同样的测试[Clarksfield 45nm]:
times(NULL) : 600ms
clock_gettime(CLOCK_MONOTONIC): 1420ms
似乎新硬件实现了一些新的功能,这提高了clock_gettime的性能?
答案 0 :(得分:1)
times(2)
)和clock_gettime(2)
不能衡量不同的事物吗? times()
衡量运行进程所用的CPU,而clock_gettime()
衡量挂钟时间,无论您的进程是否“在CPU上”。
如果vDSO版本支持clock_gettime()
使用的时钟,那么我会认为调用它的开销通常可以与times()
相提并论,但是显然他们可以返回的结果取决于您是否在某些时候调度了流程。