探讨epoll原理(红黑树、rdlist的实现)


再谈epoll

  • 原理

    • 关键概念:eventpoll结构体(fd管理器)、ep_poll_callback(回调)、rdlist(双向链表)、epitem(epoll管理的结点)
    • 每个epoll对象都有一个独立的eventpoll结构体,通过eventpoll管理存放epoll_ctl添加的事件集合,这些事件以epitem为结点挂载到红黑树上。添加到epoll中的事件,都会与设备驱动建立回调关系,当相应事件发生时该回调将事件对应的epitem结点加入rdlist即可;
    • 因此,当用户调用epoll_wait是指上内核只检查了rdlist是否为空,若非空将其拷贝到用户态并返回触发事件数量。
    • 可以说:红黑树+rdlist+回调铸就了epoll的高效。
  • 为何支持百万并发

    • 不用重复传递事件集合
    • epoll初始化时,内核开辟了epoll缓冲区,缓冲区内事件以epitem结点挂载到红黑树上,通过epoll_ctl的任何操作都是O(logN)
    • epoll_wait调用仅需观察rdlist是否为空,若非空则拷贝rdlist到用户空间并返回触发事件数量,无需遍历
    • 向内核中断处理注册回调,一旦关心的事件触发,回调自动将socket对应的epitem添加到rdlist中
  • ET和LT,来自电子的概念

    • ET边沿触发:无论事件是否处理完毕,仅触发一次
    • LT水平触发:只要事件没有处理完毕,每一次epoll_wait都触发该事件


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM