LINUX 下epoll機制(API函數)

epoll
	epoll是Linux下多路複用IO接口select/poll的增強版本,它能顯著提高程序在大量併發連接中只有少量活躍的情況下的系統CPU利用率,因爲它會複用文件描述符集合來傳遞結果而不用迫使開發者每次等待事件之前都必須重歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合就行了。
	epoll除了提供select/poll那種IO事件的電平觸發(Level Triggered)外,還提供了邊沿觸發(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態,減少epoll_wait/epoll_pwait的調用,提高應用程序效率。
cat查看一個進程打開socket描述符上限

cat /proc/sys/fs/file-max
如有需要,可以通過修改配置文件的方式修改上限值
sudo vi /etc/security/limits.conf
在文件尾部寫入以下配置,soft軟限制,hard硬限制。如下:
soft nofile 65536
hard nofile 100000

epoll API函數

1.創建一個epoll句柄,參數size用來告訴內核監聽的文件描述符的個數,跟內存大小有關。
#include <sys/epoll.h>
int epoll_create(int size) size:監聽數目
這個函數其實就是在內核中創建一顆紅黑樹
2.控制某個epoll監控的文件描述符上的事件:註冊 修改 刪除
int epoll_ctl(int epfd,int fd,struct epoll_event *event)
epfd: 爲epoll_create的句柄
op: 表示動作 用三個宏來表示:
EPOLL_CTL_ADD(註冊新的fd到epfd),
EPOLL_CTL_MOD(修改已經註冊的fd的監聽事件)
EPOLL_CTL_DEL(從epfd刪除一個fd);
event:告訴內核需要監聽的事件

struct epoll_event{
__uint32_t events;/*Epoll events*/
epoll_data_t data;//
}
該函數的作用就是將要監聽的節點掛到樹上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章