5.2. POSIX 时钟
POSIX 是用于实施和表示时间源的标准。您可以将 POSIX 时钟分配给应用程序,而不影响系统中的其他应用程序。这与内核选择并在系统中实施的硬件时钟不同。
用于读取给定 POSIX 时钟的功能是 clock_gettime()
,它在 < time.h&
gt; 中定义。kernel counterpart to clock_gettime()
是一个系统调用。当用户进程调用 clock_gettime()
时:
-
对应的 C 库(
glibc
)调用sys_clock_gettime()
系统调用。 -
sys_clock_gettime()
执行请求的操作。 -
sys_clock_gettime()
将结果返回到用户程序。
但是,上下文从用户应用程序切换到内核具有 CPU 成本。尽管这种成本很低,但如果操作重复了数以千倍,但成本数量会给应用程序的整体性能造成影响。为了避免上下文切换到内核,因此可以更快地读取时钟,对 CLOCK_MONOTONIC_COARSE
和 CLOCK_REALTIME_COARSE
POSIX 时钟的支持。
使用 _COARSE
时钟变体执行的 clock_gettime()
读取的时间无需内核干预,且完全在用户空间中执行。这会产生显著的性能。对 _COARSE
时钟读取的时间有毫秒(ms)解析,这意味着不会记录小于 1ms 的时间间隔。POSIX 时钟的 _COARSE
变体适合任何可容纳几秒时钟解析的应用程序。
要将读取 POSIX 时钟的成本和解决方案与没有 _COARSE
前缀进行比较,请参阅 RHEL for Real Time 参考指南。