1、select: select庫(kù)是在linux和windows平臺(tái)都基本支持的 事件驅(qū)動(dòng)模型庫(kù),并且在接口的定義也基本相同,只是部分參 數(shù)的含義略有差異,最大并發(fā)限制1024,是最早期的事件驅(qū)動(dòng)模型。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比陽(yáng)高網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式陽(yáng)高網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋陽(yáng)高地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
? 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)程打開(kāi)的最大事件描述符的上限是系統(tǒng)可以打開(kāi)的文件的最大數(shù),同時(shí) epoll庫(kù)的IO效率不隨描述符數(shù)目增加而線性下降,因?yàn)樗粫?huì)對(duì)內(nèi)核上報(bào)的“活躍”的描述符進(jìn)行操作。
Select:POSIX所規(guī)定,目前幾乎在所有的平臺(tái)上支持,其良好跨平臺(tái)支持也是它的一個(gè)優(yōu)點(diǎn),本質(zhì)上是通過(guò)設(shè)置或者檢查存放fd標(biāo)志位的數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行下一步處理缺點(diǎn)單個(gè)進(jìn)程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,可以通過(guò)修改宏定義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)存拷貝方法來(lái)實(shí)現(xiàn)內(nèi)核將 FD消息通知給用戶空間,這樣一個(gè)用來(lái)存放大量fd的數(shù)據(jù)結(jié)構(gòu),這樣會(huì)使得用戶空間和內(nèi)核空間在傳遞該結(jié)構(gòu)時(shí)復(fù)制開(kāi)銷大
poll:本質(zhì)上和select沒(méi)有區(qū)別,它將用戶傳入的數(shù)組拷貝到內(nèi)核空間,然后查詢每個(gè)fd對(duì)應(yīng)的設(shè)備狀態(tài)其沒(méi)有最大連接數(shù)的限制,原因是它是基于鏈表來(lái)存儲(chǔ)的大量的fd的數(shù)組被整體復(fù)制于用戶態(tài)和內(nèi)核地址空間之間,而不管這樣的復(fù)制是不是有意義poll特點(diǎn)是“水平觸發(fā)”,如果報(bào)告了fd后,沒(méi)有被處理,那么下次poll時(shí)會(huì)再次報(bào)告該fd?
在Linux 2.6內(nèi)核中提出的select和poll的增強(qiáng)版本支持水平觸發(fā)LT和邊緣觸發(fā)ET,最大的特點(diǎn)在于邊緣觸發(fā),它只告訴進(jìn)程哪些fd剛剛變?yōu)榫托钁B(tài),并且只會(huì)通知一次使用“事件”的就緒通知方式,通過(guò)epoll_ctl注冊(cè)fd,一旦該fd就緒,內(nèi)核就會(huì)采用類似callback的回調(diào)機(jī)制來(lái)激活該fd,epoll_wait便可以收到通知優(yōu)點(diǎn):沒(méi)有最大并發(fā)連接的限制:能打開(kāi)的FD的上限遠(yuǎn)大于1024(1G的內(nèi)存能監(jiān)聽(tīng)約10萬(wàn)個(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ù)無(wú)關(guān)內(nèi)存拷貝,利用mmap(Memory Mapping)加速與內(nèi)核空間的消息傳遞;即epoll使用mmap減少?gòu)?fù)制開(kāi)銷
網(wǎng)站標(biāo)題:網(wǎng)絡(luò)IO驅(qū)動(dòng)
標(biāo)題網(wǎng)址:http://jinyejixie.com/article20/gggjco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、App設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)