nginx 自己维护了一个时间,用户向用户提供时间,它使用缓存时间的机制,这样避免了频繁的系统调用(gettimeofday),加快处理速度。
但缓存时间,又必须要及时更新时间,否则时间将不准确。所以, NGINX配套了一系列的措施,减少误差。
void
ngx_process_events_and_timers(ngx_cycle_t *cycle)
{
ngx_uint_t flags;
ngx_msec_t timer, delta;
if (ngx_timer_resolution) {
timer = NGX_TIMER_INFINITE; //-1
flags = 0;
} else {
timer = ngx_event_find_timer();
flags = NGX_UPDATE_TIME;
}
(void) ngx_process_events(cycle, timer, flags);
}
先暂时不去理会ngx_timer_resolution,只关注else部分,timer = ngx_event_find_timer(),
该函数返回距离第一个超时事件还有多久时间,可能为-1,即目前没有注册超时事件。
而同时,flags 标记为NGX_UPDATE_TIME,即更新缓存时间。
ngx_process_events对应于具体的事件处理函数,本文以epoll为例,因而对应于如下代码:
static n