Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_monotonic_time函數-CSDN博客?
定義在 src\core\ngx_times.c
static ngx_msec_t
ngx_monotonic_time(time_t sec, ngx_uint_t msec)
{
#if (NGX_HAVE_CLOCK_MONOTONIC)struct timespec ts;#if defined(CLOCK_MONOTONIC_FAST)clock_gettime(CLOCK_MONOTONIC_FAST, &ts);
#elseclock_gettime(CLOCK_MONOTONIC, &ts);
#endifsec = ts.tv_sec;msec = ts.tv_nsec / 1000000;#endifreturn (ngx_msec_t) sec * 1000 + msec;
}
此時
NGX_HAVE_CLOCK_MONOTONIC=1
CLOCK_MONOTONIC_FAST 未定義
clock_gettime(CLOCK_MONOTONIC, &ts);
struct timespec 是 POSIX 標準中定義的時間結構體,包含兩個字段:
tv_sec:秒數部分。
tv_nsec:納秒部分(1 秒 = 10^9 納秒)
調用 clock_gettime 函數,獲取當前的單調時間,并將結果存儲到 ts 中
是 POSIX 標準中定義的一個函數,用于獲取高精度的時間信息。它能夠從指定的時鐘源(clock source)中讀取當前時間,并以納秒級精度返回結果
函數原型
#include <time.h>int clock_gettime(clockid_t clk_id, struct timespec *tp);
clk_id :
指定時鐘源(clock source),決定了時間的來源。
常見的時鐘源包括:
CLOCK_REALTIME :系統實時時間(wall-clock time),可以被手動調整或通過 NTP 同步。
CLOCK_MONOTONIC :單調遞增的時間,從某個固定點開始計時,不受系統時間調整的影響。
CLOCK_PROCESS_CPUTIME_ID :進程的 CPU 時間。
CLOCK_THREAD_CPUTIME_ID :線程的 CPU 時間。
CLOCK_BOOTTIME (Linux 特有):類似于 CLOCK_MONOTONIC,但包括系統休眠時間。
選擇不同的時鐘源會影響時間的用途。
tp :
指向一個 struct timespec 結構體的指針,用于存儲獲取到的時間信息。
返回值
成功時返回 0。
失敗時返回 -1,并設置 errno 表示錯誤原因。
sec = ts.tv_sec;msec = ts.tv_nsec / 1000000;return (ngx_msec_t) sec * 1000 + msec;
轉換為 毫秒數 返回
此時
(ngx_msec_t) sec * 1000 + msec = 1530546474