epoll简述

epoll实现机制粗糙版总结。

Level-triggered VS Edge-triggered 两种模式在实现中的不同之处在于:

在 ep_send_events_proc 函数(ep_send_events中的一个回调函数)的中,如果是 level-triggered 模式,当前的 epoll_item 对象被重新加到 eventpoll 的就绪列表 ready list 中,这样在下一次 epoll_wait 调用时,这些 epoll_item 对象就会被重新处理。而 edge-triggered 模式,不会重新加入。

另外,引用一篇优质blog select、poll、epoll - IO模型超详解。基础概念和基础使用等的信息,直接搜索,不再重复写这里了。

在上面引用的blog中,有一张关于 epoll 机制更抽象一点的图,放一起方便对比。但是该作者有一处错误,关于mmap说明

这里对 mmap 得说明是错误的。并不是只有块设备才可以进行 mmap 内存映射。

所以上图中的解释是错误的。按我的认知来讲,这里没有将事件链表进行内存映射,至少不是设备类型的原因。

rdlist 链表中的事件是会被复制到用户空间的。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!