Nginx 定时器事件

本文介绍了Nginx中的定时器事件实现,它不依赖于内核,通过红黑树管理定时事件。Nginx使用ngx_event_t结构体和全局变量维护定时器,初始化时调用红黑树初始化。超时检测通过添加和删除事件到红黑树来完成,而判断超时和检查过期定时器则由相应函数实现。
摘要由CSDN通过智能技术生成

概述

        在 Nginx 中定时器事件的实现与内核无关。在事件模块中,当等待的事件不能在指定的时间内到达,则会触发 Nginx 的超时机制,超时机制会对发生超时的事件进行管理,并对这些超时事件作出处理。对于定时事件的管理包括两方面:定时事件对象的组织形式 和 定时事件对象的超时检测。

定时事件的组织

        Nginx 的定时器由红黑树实现的。在保存事件的结构体 ngx_event_t 中有三个关于时间管理的成员,如下所示:

struct ngx_event_s{
    ...
    /* 标志位,为1表示当前事件已超时 */  
    unsigned         timedout:1;  
    /* 标志位,为1表示当前事件存在于由红黑树维护的定时器中 */  
    unsigned         timer_set:1;  
    /* 由红黑树维护的定时器 */  
    ngx_rbtree_node_t   timer; 
    ...
};

        Nginx 设置两个关于定时器的全局变量。在文件 src/event/ngx_event_timer.c中定义:

/* 所有定时器事件组成的红黑树 */
ngx_thread_volatile ngx_rbtree_t  ngx_event_timer_rbtree;
/* 红黑树的哨兵节点 */
static ngx_rbtree_node_t          ngx_event_timer_sentinel;

        这棵红黑树的每一个节点代表一个事件 ngx_event_t 结构体中的成员 timerngx_rbtree_node_t 节点代表事件的超时时间,以这个超时时间的大小组成的红黑树 ngx_event_timer_rbtree,则该红黑树中最左边的节点代表最可能超时的事件。

        定时器事件初始化实际上调用红黑树的初始化,其在文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值