理解clock_gettime()的不同时钟

23 浏览
0 Comments

理解clock_gettime()的不同时钟

我想使用clock_gettime()函数来测量我的代码性能。

我不明白函数中不同种类的时钟在手册描述中的区别,尤其是CLOCK_REALTIME, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID

请问有人可以解释一下这些时钟各自的作用吗?

0
0 Comments

理解不同的时钟钟表_gettime()

问题的出现原因是什么?

不同的时钟(CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_PROCESS_CPUTIME_ID和CLOCK_THREAD_CPUTIME_ID)用于不同的目的,但是在一些情况下,选择正确的时钟可能会变得困难。

解决方法是什么?

选择正确的时钟取决于您想要测量的内容。如果您想要测量总经过时间(包括阻塞等待IO的时间),则应使用CLOCK_MONOTONIC;如果您只想计算进程在执行过程中实际的时钟周期数,则应使用CLOCK_PROCESS_CPUTIME_ID。

但是,在Linux中,CLOCK_MONOTONIC受到系统时间调整的影响,可能会出现不连续性。为了解决这个问题,引入了CLOCK_MONOTONIC_RAW。

关于CLOCK_MONOTONIC是否确实存在问题,目前尚无权威的信息。一些人声称CLOCK_MONOTONIC存在问题,但是没有找到可靠的信息。因此,是否应该使用CLOCK_MONOTONIC仍然是有争议的。如果CLOCK_MONOTONIC确实存在问题,则应该改用CLOCK_MONOTONIC_RAW。

此外,Linux内核从2.6.12开始实现了CLOCK_THREAD_CPUTIME_ID,而glibc 2.4+也原生支持它。

正确选择时钟对于正确测量所需的时间非常重要。根据您的需求选择适当的时钟,以确保准确性和一致性。

0