探討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