- 1
- 2
- 3
- 4
- 5
libevent的定时器最小堆的高效管理.docx
资料介绍
libevent 的定时器:最小堆的高效管理
定时器在事件循环里的角色
libevent 不仅要处理 IO 事件和信号事件,还要处理定时事件。定时器在事件循环里扮演着特殊的角色——它不仅决定回调何时触发,还决定了事件循环阻塞多久。
如果定时器管理得不好,要么错过定时时间,要么让事件循环空转浪费 CPU。libevent 用最小堆来管理定时器,让这一切变得高效。
为什么用最小堆
管理定时事件,最直接的想法是把所有定时器排成链表,逐个遍历找最近要触发的。但这样效率是 O(n),定时器一多就慢。
libevent 选择用最小堆(min-heap)。堆顶永远是最近要触发的定时事件。这样:
获取最近超时时间,只需 O(1),直接看堆顶。
插入、删除定时器,是 O(log n),效率很高。
检查堆顶是否到期,只需看堆顶和当前时间的比较,如果堆顶都没到期,后面的更不可能到期。
所以最小堆让定时器管理变得非常高效,尤其适合大量定时器的场景。
最小堆与事件循环的结合
最小堆在事件循环里的应用,是最精妙的地方。
在调用 IO 复用 dispatch 之前,libevent 从最小堆取出堆顶,得到最近要触发的定时事件时间,和当前时间做差,得到超时时间。
这个超时时间,被用作 epoll_wait 等系统调用的阻塞参数。这样,即使没有 IO 事件就绪,定时器也能在到期时被及时响应,因为 epoll_wait 会在超时后返回。
也就是说,定时器是"借用" IO 复用的超时机制来触发的。这是一种非常优雅的设计,避免了额外的线程或机制。
部分文件列表
| 文件名 | 大小 |
| libevent的定时器最小堆的高效管理.docx | 38K |
最新上传
-
yahuang001 打赏3.00元 6小时前
-
yahuang001 打赏1.00元 6小时前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)