探討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都觸發該事件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章