当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Process.clock_gettime用法及代码示例


本文简要介绍ruby语言中 Process.clock_gettime 的用法。

用法

clock_gettime(clock_id [, unit]) → number

返回 POSIX clock_gettime () 函数返回的时间。

p Process.clock_gettime(Process::CLOCK_MONOTONIC)
#=> 896053.968060096

clock_id 指定一种时钟。它被指定为以 Process::CLOCK_ 开头的常量,例如 Process::CLOCK_REALTIME Process::CLOCK_MONOTONIC

支持的常量取决于操作系统和版本。如果可用,Ruby 提供以下类型的clock_id

CLOCK_REALTIME

SUSv2 到 4、Linux 2.5.63、FreeBSD 3.0、NetBSD 2.0、OpenBSD 2.1、macOS 10.12、Windows-8/Server-2012

CLOCK_MONOTONIC

SUSv3 至 4、Linux 2.5.63、FreeBSD 3.0、NetBSD 2.0、OpenBSD 3.4、macOS 10.12、Windows-2000

CLOCK_PROCESS_CPUTIME_ID

SUSv3 到 4,Linux 2.5.63,FreeBSD 9.3,OpenBSD 5.4,macOS 10.12

CLOCK_THREAD_CPUTIME_ID

SUSv3 到 4、Linux 2.5.63、FreeBSD 7.1、OpenBSD 5.4、macOS 10.12

CLOCK_VIRTUAL

FreeBSD 3.0, OpenBSD 2.1

CLOCK_PROF

FreeBSD 3.0, OpenBSD 2.1

CLOCK_REALTIME_FAST

FreeBSD 8.1

CLOCK_REALTIME_PRECISE

FreeBSD 8.1

CLOCK_REALTIME_COARSE

Linux 2.6.32

CLOCK_REALTIME_ALARM

Linux 3.0

CLOCK_MONOTONIC_FAST

FreeBSD 8.1

CLOCK_MONOTONIC_PRECISE

FreeBSD 8.1

CLOCK_MONOTONIC_COARSE

Linux 2.6.32

CLOCK_MONOTONIC_RAW

Linux 2.6.28、macOS 10.12

CLOCK_MONOTONIC_RAW_APPROX

macOS 10.12

CLOCK_BOOTTIME

Linux 2.6.39

CLOCK_BOOTTIME_ALARM

Linux 3.0

CLOCK_UPTIME

FreeBSD 7.0,OpenBSD 5.5

CLOCK_UPTIME_FAST

FreeBSD 8.1

CLOCK_UPTIME_RAW

macOS 10.12

CLOCK_UPTIME_RAW_APPROX

macOS 10.12

CLOCK_UPTIME_PRECISE

FreeBSD 8.1

CLOCK_SECOND

FreeBSD 8.1

CLOCK_TAI

Linux 3.10

请注意,SUS 代表单一 Unix 规范。 SUS 包含 POSIX, clock_gettime 在 POSIX 部分中定义。 SUS 定义 CLOCK_REALTIME 强制,但 CLOCK_MONOTONIC CLOCK_PROCESS_CPUTIME_ID CLOCK_THREAD_CPUTIME_ID 是可选的。

此外,有几个符号被接受为 clock_id clock_gettime () 有仿真。

例如,当 clock_gettime () 不可用时, Process::CLOCK_REALTIME 被定义为:GETTIMEOFDAY_BASED_CLOCK_REALTIME

CLOCK_REALTIME 的仿真:

:GETTIMEOFDAY_BASED_CLOCK_REALTIME

使用 SUS 定义的gettimeofday()。 (不过,SUSv4 淘汰了它。)分辨率为 1 微秒。

:TIME_BASED_CLOCK_REALTIME

使用 ISO C 定义的time()。分辨率为 1 秒。

CLOCK_MONOTONIC 的仿真:

:MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC

使用mach_absolute_time(),在 Darwin 上可用。分辨率取决于 CPU。

:TIMES_BASED_CLOCK_MONOTONIC

使用 POSIX 定义的times() 的结果值。 POSIX 将其定义为“times() 应返回过去的任意点(例如,系统 start-up 时间)以来经过的实时时间(以时钟滴答为单位)”。例如,GNU/Linux 返回一个基于 jiffies 的值,它是单调的。但是,4.4BSD 使用gettimeofday(),它不是单调的。 (不过,FreeBSD 使用 clock_gettime ( CLOCK_MONOTONIC )。)分辨率是时钟滴答声。 “getconf CLK_TCK”命令显示每秒时钟滴答数。 (在旧系统中,每秒时钟滴答数由 HZ 宏定义。)如果是 100,clock_t 为 32 位整数类型,则分辨率为 10 毫秒,不能表示超过 497 天。

CLOCK_PROCESS_CPUTIME_ID 的仿真:

:GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID

使用 SUS 定义的getrusage()。 getrusage()与RUSAGE_SELF配合使用,仅获取调用进程的时间(不包括子进程的时间)。结果是用户时间 (ru_utime) 和系统时间 (ru_stime) 相加。分辨率为 1 微秒。

:TIMES_BASED_CLOCK_PROCESS_CPUTIME_ID

使用 POSIX 定义的times()。结果是用户时间 (tms_utime) 和系统时间 (tms_stime) 相加。 tms_cutime 和 tms_cstime 被忽略以排除子进程的时间。分辨率是时钟滴答声。 “getconf CLK_TCK”命令显示每秒时钟滴答数。 (每秒时钟滴答数由旧系统中的 HZ 宏定义。)如果为 100,则分辨率为 10 毫秒。

:CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID

使用 ISO C 定义的clock()。分辨率为 1/CLOCKS_PER_SEC。 CLOCKS_PER_SEC 是 time.h 定义的 C-level 宏。 SUS 将CLOCKS_PER_SEC 定义为 1000000。不过,非 Unix 系统可能将其定义为不同的值。如果CLOCKS_PER_SEC 为 1000000 作为 SUS,则分辨率为 1 微秒。如果CLOCKS_PER_SEC 为 1000000,clock_t 为 32 位整数类型,则不能表示超过 72 分钟。

如果不支持给定的clock_id,则会引发 Errno::EINVAL。

unit 指定返回值的类型。

:float_second

浮点数秒数(默认)

:float_millisecond

毫秒数作为浮点数

:float_microsecond

微秒数作为浮点数

:第二

以整数表示的秒数

:毫秒

毫秒数作为整数

:微秒

以整数表示的微秒数

:纳秒

纳秒数作为整数

底层函数 clock_gettime () 返回纳秒数。 Float 对象(IEEE 754 双精度)不足以表示 CLOCK_REALTIME 的返回值。如果需要精确的纳秒值,请使用 :nanoseconds 作为 unit

返回值的原点(零)会有所不同。例如,系统启动时间、进程启动时间、Epoch 等。

CLOCK_REALTIME 中的原点被定义为纪元(1970-01-01 00:00:00 UTC)。但是有些系统会计算闰秒,而其他系统则不会。因此,结果可以在不同系统之间进行不同的解释。 Time.now CLOCK_REALTIME 更推荐。

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Process.clock_gettime。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。