6.2. POSIX 时钟
POSIX 是实施和代表时间源的标准。您可以为应用程序分配 POSIX 时钟,而不影响系统中的其他应用程序。这与内核选择并在系统中实施的硬件时钟相反。
用于读取给定 POSIX 时钟的函数是 clock_gettime (),它在 < time.h > 中定义。内核与 clock_gettime () 对应的是系统调用。当用户进程调用 clock_gettime () 时:
-
对应的 C 库(
glibc)调用sys_clock_gettime ()系统调用。 -
sys_clock_gettime ()执行请求的操作。 -
sys_clock_gettime ()将结果返回给用户程序。
但是,从用户应用程序切换到内核的上下文具有 CPU 成本。虽然这个成本非常低,但如果操作重复了数千次,但累积的成本可能会对应用程序的整体性能产生影响。为了避免上下文切换到内核,从而更快地读取时钟,支持 CLOCK_MONOTONIC_COARSE 和 CLOCK_REALTIME_COARSE POSIX 时钟,格式为虚拟动态共享对象(VDSO)库函数。
使用其中一个 _COARSE 时钟变体执行 clock_gettime () 的时间读取不需要内核干预,且完全在用户空间中执行。这会显著提高性能。_COARSE 时钟读取的时间具有毫秒(ms)解析,这意味着不会记录小于 1 ms 的时间间隔。POSIX 时钟的 _COARSE 变体适合可容纳 millisecond 时钟分辨率的任何应用程序。