- 1
- 2
- 3
- 4
- 5
libevent的evmap文件描述符与事件的映射艺术.docx
资料介绍
libevent 的 evmap:fd 与事件的映射艺术
一个 fd 上可以挂多个事件
在 libevent 里,一个文件描述符上可能同时注册了多个事件。比如一个 socket,既注册了读事件,又注册了写事件,甚至可能有多个用途不同的读回调。当内核返回说这个 fd 可读时,libevent 需要找到所有挂在这个 fd 上的、关心读事件的事件对象,把它们全部激活。
这就是 evmap 要解决的问题。它是 libevent 内部一个非常关键、却常被忽视的数据结构。
evmap 是什么
evmap 是一个映射表,从文件描述符映射到事件列表。它的实现是一个哈希表(或双链表数组),key 是 fd,value 是一个链表,链接着所有注册在这个 fd 上的 event 结构。
当 epoll_wait 返回某个 fd 就绪时,libevent 通过 evmap 找到这个 fd 上注册的所有事件,再根据就绪的事件类型,把关注读的、关注的写的事件分别加入激活队列。
可以说,evmap 是事件循环"翻译"阶段的核心,它把内核返回的"哪个 fd 就绪",翻译成"哪些事件要激活"。
evmap 的工作流程
evmap 的工作贯穿事件注册和事件激活两个阶段。
在事件注册阶段,当调用 event_add() 时,会走到 evmap_io_add(),把 (fd, event) 对加入到 evmap 映射中。这样,这个 fd 上就登记了对应的读或写事件。
在事件激活阶段,当后端返回 fd 就绪后,libevent 查询 evmap,找到这个 fd 对应的所有事件,把关注对应事件类型的 event 插入激活队列。
所以 evmap 既负责"登记"(注册时),也负责"查询"(激活时)。
为什么需要 evmap
有人会问,为什么不直接把 fd 和 event 一一对应,非要搞个映射表?
因为一个 fd 上可能挂了多个事件。直接一一对应的话,就无法处理"一个 socket 同时可读又可写、且各有关心它的多个事件"的情况。
部分文件列表
| 文件名 | 大小 |
| libevent的evmap文件描述符与事件的映射艺术.docx | 38K |
最新上传
-
江岚 打赏100.00元 16小时前
用户:潇潇江南
-
他山之石可攻玉 打赏50.00元 16小时前
用户:烟雨
-
21ic下载 打赏1.00元 20小时前
用户:王小琪
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
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天前




全部评论(0)