本文主要是介绍libevent I/O复用超时时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
读了一下libevent的部分代码,主要是timer,signal,epoll相关的,学习了网络库如何处理定时器事件和信号。
大多数网络模块的库应该都是这样实现的,很巧妙。
首先说timer,libevent通过一个小根堆结构来保存定时事件,堆顶元素是最近即将超时的时间,例如右5个定时器,分别在2S,1S,4S,7S,8S后超时,那么堆顶的元素就是1S的定时器,这有什么用呢?
因为不管是select/poll/epoll,监控文件描述符的时候都会设置一个超时间隔,我们恰好可以把堆顶元素的超时时间作为这个超时间隔。
还是上面的5个timer,在本次的epoll_wait中我们可以取出堆顶元素1S作为超时间隔,分以下两种情况:
1:如果1S内没有I/O事件,那么epoll_wait将在1S后超时。此时应该触发1S的定时事件
这篇关于libevent I/O复用超时时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!