溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

網(wǎng)絡(luò)IO驅(qū)動(dòng)

發(fā)布時(shí)間:2020-09-26 05:31:37 來源:網(wǎng)絡(luò) 閱讀:258 作者:派獺星 欄目:系統(tǒng)運(yùn)維

1、select: select庫(kù)是在linux和windows平臺(tái)都基本支持的 事件驅(qū)動(dòng)模型庫(kù),并且在接口的定義也基本相同,只是部分參 數(shù)的含義略有差異,最大并發(fā)限制1024,是最早期的事件驅(qū)動(dòng)模型。


? 2、poll: 在Linux 的基本驅(qū)動(dòng)模型,windows不支持此驅(qū)動(dòng)模型,是select的升級(jí)版,取消了最大的并發(fā)限制,在編譯 nginx的時(shí)候可以使用--with-poll_module和--without-poll_module這兩個(gè)指定是否編譯select庫(kù)。


? 3、epoll: epoll是庫(kù)是Nginx服務(wù)器支持的最高性能的事件驅(qū)動(dòng)庫(kù)之一,是公認(rèn)的非常優(yōu)秀的事件驅(qū)動(dòng)模型,它和select 和poll有很大的區(qū)別,epoll是poll的升級(jí)版,但是與poll的效率有很大的區(qū)別. epoll的處理方式是創(chuàng)建一個(gè)待處理的事件列表,然后把這個(gè)列表發(fā)給內(nèi)核,返回的時(shí)候在去輪訓(xùn)檢查這個(gè)表,以 判斷事件是否發(fā)生,epoll支持一個(gè)進(jìn)程打開的最大事件描述符的上限是系統(tǒng)可以打開的文件的最大數(shù),同時(shí) epoll庫(kù)的IO效率不隨描述符數(shù)目增加而線性下降,因?yàn)樗粫?huì)對(duì)內(nèi)核上報(bào)的“活躍”的描述符進(jìn)行操作。




SelectPOSIX所規(guī)定,目前幾乎在所有的平臺(tái)上支持,其良好跨平臺(tái)支持也是它的一個(gè)優(yōu)點(diǎn),本質(zhì)上是通過設(shè)置或者檢查存 fd標(biāo)志位的數(shù)據(jù)結(jié)構(gòu)來進(jìn)行下一步處理 缺點(diǎn) 單個(gè)進(jìn)程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,可以通過修改宏定義 FD_SETSIZE,再重新編譯內(nèi)核實(shí)現(xiàn),但是這樣也會(huì)造成效率的降低 單個(gè)進(jìn)程可監(jiān)視的fd數(shù)量被限制,默認(rèn)是1024,修改此值需要重新編譯內(nèi)核 對(duì)socket是線性掃描,即采用輪詢的方法,效率較低 select 采取了內(nèi)存拷貝方法來實(shí)現(xiàn)內(nèi)核將 FD 消息通知給用戶空間,這樣一個(gè)用來存放大量fd的數(shù)據(jù)結(jié)構(gòu),這樣 會(huì)使得用戶空間和內(nèi)核空間在傳遞該結(jié)構(gòu)時(shí)復(fù)制開銷大


poll本質(zhì)上和select沒有區(qū)別,它將用戶傳入的數(shù)組拷貝到內(nèi)核空間,然后查詢每個(gè)fd對(duì)應(yīng)的設(shè)備狀態(tài) 其沒有最大連接數(shù)的限制,原因是它是基于鏈表來存儲(chǔ)的 大量的fd的數(shù)組被整體復(fù)制于用戶態(tài)和內(nèi)核地址空間之間,而不管這樣的復(fù)制是不是有意義 poll特點(diǎn)是水平觸發(fā),如果報(bào)告了fd后,沒有被處理,那么下次poll時(shí)會(huì)再次報(bào)告該fd?


Linux 2.6內(nèi)核中提出的selectpoll的增強(qiáng)版本 支持水平觸發(fā)LT和邊緣觸發(fā)ET,最大的特點(diǎn)在于邊緣觸發(fā),它只告訴進(jìn)程哪些fd剛剛變?yōu)榫托钁B(tài),并且只會(huì)通知一 使用事件的就緒通知方式,通過epoll_ctl注冊(cè)fd,一旦該fd就緒,內(nèi)核就會(huì)采用類似callback的回調(diào)機(jī)制來 激活該fd,epoll_wait便可以收到通知 優(yōu)點(diǎn): 沒有最大并發(fā)連接的限制:能打開的FD的上限遠(yuǎn)大于1024(1G的內(nèi)存能監(jiān)聽約10萬個(gè)端口),具體查 /proc/sys/fs/file-max,此值和系統(tǒng)內(nèi)存大小相關(guān) 效率提升:非輪詢的方式,不會(huì)隨著FD數(shù)目的增加而效率下降;只有活躍可用的FD才會(huì)調(diào)用callback函數(shù),即 epoll最大的優(yōu)點(diǎn)就在于它只管理活躍的連接,而跟連接總數(shù)無關(guān) 內(nèi)存拷貝,利用mmap(Memory Mapping)加速與內(nèi)核空間的消息傳遞;即epoll使用mmap減少?gòu)?fù)制開銷


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI