當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。