nginx-定时器

Nginx定时器事件是由自身实现的,与内核无关,它的底层维护着一颗红黑树。红黑树所有的节点都是有序的,只需要判断最小的那个节点(最左边的节点)是否超时,如果没有超时,那么意味着所有节点都没有超时。反之,调用回调函数,再从红黑树中删除该节点。

定时器的整体流程

定时器会每隔一定的时间调用ngx_event_expire_timers函数,该函数会处理所有已触发的事件。而调用该函数的频率可以通过ngx_event_find_timer函数计算。

ngx_rbtree_min

ngx_rbtree_min函数是用来找到最小的节点,其实就是遍历最左边的节点。

static ngx_inline ngx_rbtree_node_t *
ngx_rbtree_min(ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel)
{
    while (node->left != sentinel) {
        node = node->left;
    }

    return node;
}

ngx_event_find_timer

ngx_event_find_timer函数调用了ngx_rbtree_min,查看最小节点是否超时,超时了返回0,否则返回剩余时间。

ngx_event_expire_timers

ngx_event_expire_timers函数用来检查所有已触发的事件,调用他们的回调函数,然后再从红黑树中删掉。以下是该函数的流程图。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值