libevent源码分析(二)——补

昨天结束了eventbase的分析,但是其中还有几个知识点没有说清楚,因此补一下。

IO和timer怎么统一

昨天我们说了libevent的timer和signal都统一到了IO的多路分发中,那么是怎么实现两者的联动的呢?
其实,libevent封装的多路复用机制中,例如epoll和select中都有一个等待时间timeout,当超过设定的时间后,就立即返回。这样便保证了即使没有IO,也可以完成返回。所以,我们可以将timer的最小超时时间融入到这个等待时间里面。这样,在IO返回之后,我们设置的timeout事件也可以随之触发,这样,二者就完美的融入为了一体。
这也是reactor经典的处理timer的方法。我们之前说过的最小堆,就是为了方便取得最小超时时间而设定的,可以O(1)的时间内取得最小超时时间,插入删除的效率也很快。

IO和signal的统一

signal本身就是一个异步的典型,比如信号中断,你完全不知道何时会出现一个信号,而且也不想timer一样简单,设置超时时间等待就可以了。你还必须告诉内核,这个信号来了你要干什么。
那我们就必须在信号到来的时候,先通知IO返回,然后将三者统一处理。这样才能实现三者的统一管理。
这就是下一节的信号处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值