日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO多路复用:select/poll/epoll

發(fā)布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO多路复用:select/poll/epoll 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

select

int select (int maxfds,fd_set * readfds,fd_set * writefds,fd_set * errorfds,struct timeval* timeout)

返回值:有變化的描述符,返回值大于零,且為描述符個數(shù);等于零,超時或者沒有變化的描述符;-1出錯。

timeout參數(shù)

1)null時,select將會一直阻塞,直到有監(jiān)聽的描述符集合里面描述符發(fā)生了變化;

2)0時,select 會立即返回,有無描述符發(fā)生變化都會立即返回;

3)大于零的值,指定超時時間,超出時間就返回;

?

Poll

int poll (struct pollfd* fds , unsigned int nfds , int timeout)

struct pollfd{

? ? int fd;

? ? short events;

? ? short revents;

}

返回值:大于零,返回revents中不為0的文件描述符個數(shù);等于零,超時或者沒有描述符就緒;-1,調(diào)用出錯。

timeout參數(shù):
?

1)負數(shù),無限超時;一直等待,直到一個指定的事件發(fā)生;? ?相當(dāng)于selsect中的NULL;

2)0;表示立即返回;無論是否有已經(jīng)準備好的描述符;

3)大于零,指定等待的超時時間;超時后返回

?

?

epoll

創(chuàng)建epoll句柄

int epoll_create (int size);

向內(nèi)核注冊,修改或者刪除 一個描述符

int epoll_ctl (int epfd, int operator , int fd , struct epoll_events * event?);

等待事件的產(chǎn)生

int epoll_wait (int epfd, struct epoll_events*events , int maxevents , int timeout);

timeout參數(shù):0立即返回,-1將永久阻塞直到有一個描述符有事件產(chǎn)生;大于零,指定超時時間

?


select、poll、epoll的區(qū)別

1)select : 描述符集合有上限,一般是1024/2048;每次需要線性遍歷描述符集合獲得描述符的事件狀態(tài),對于分布的比較稀疏的比較少的描述符,效率會很低;每次fd_set在select返回之后都會發(fā)生變化;需要重新初始化;但移植性比較好,在某些unix系統(tǒng)上不支持poll,超時時間精度比較高

2)poll相對于select而言,描述符數(shù)量遠遠大于select,是喲個特定大小的數(shù)組來保存監(jiān)控的描述符,從而不受描述符值大小的影響;poll將監(jiān)控的輸入事件和輸出事件分開,允許在每次返回后,被監(jiān)控的文件數(shù)組可以被復(fù)用而不需要重新初始化;

3)epoll 使用一個文件描述符管理多個描述符。支持一個進程打開大數(shù)目的描述符,也即是描述符數(shù)量不受限制,對于支持上萬連接的IM服務(wù)器而言,較為實用!上限是最大可以打開的文件數(shù)目;IO效率不隨描述符的數(shù)量的增加而減少。在每個注冊到內(nèi)核的fd上實現(xiàn)了回調(diào)函數(shù),只有當(dāng)當(dāng)前socket活躍的時候才會去調(diào)用回調(diào)函數(shù),所以epoll只會對活躍的socket進行操作(即事件驅(qū)動)。而select/poll要線性掃描所有的集合,導(dǎo)致效率下降。epoll將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的事件表中,避免了用戶空間和內(nèi)核空間數(shù)據(jù)的多次拷貝

總結(jié)

以上是生活随笔為你收集整理的IO多路复用:select/poll/epoll的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。