redis自學(18)epoll

蓝海的bug本發表於2024-03-14

Epoll

epoll模式是對selectpoll的改進,它提供了三個函式:

Epoll有沒有解決之前select或者poll的問題?

  • select或者poll把要監聽的陣列或集合複製到核心空間,等待FD就緒,就緒後,還要複製回使用者空間。
  • epollselect函式的功能拆分開了,建立eventpoll以後,有需要監聽的FD,用epoll_ctl新增進rb_root就行了,之後就會一直在紅黑樹裡監聽,不用反覆的在使用者態和核心態之間反覆複製;而在返回FD的過程中,只是從核心態的list_head裡只複製了就緒的FD,數量就少了很多。
  • 相對於select或者pollepoll返回的FD一定是已經就緒的,不用再遍歷判斷是否就緒。
  • Select最多能監聽1024FD,而poll無上限,但只是理論上的,數量太多效率就太低了。而epoll,新增的FD都會放到紅黑樹上,而紅黑樹的增刪改查的效能不會隨著元素的數量增加有太多的波動。

相關文章