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