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