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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

浅析epoll-为何多路复用I/O要使用epoll

發(fā)布時(shí)間:2024/9/3 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析epoll-为何多路复用I/O要使用epoll 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)自C++愛(ài)好者博客?http://www.cppfans.org/author/eliteyang,順便記錄一下自己學(xué)習(xí)epoll的過(guò)程。


現(xiàn)如今,網(wǎng)絡(luò)通訊中用epoll(linux)和IOCP(windows)幾乎是大家津津樂(lè)道的東西,不為別的,就因?yàn)楦咝?#xff0c;所以大家喜歡用。IOCP的基礎(chǔ)東西已經(jīng)講過(guò)了,可翻閱《IOCP淺析》?《IOCP淺析[二]——IOCP出現(xiàn)的意義和函數(shù)接口》.

什么是epoll

epoll是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率,因?yàn)樗鼤?huì)復(fù)用文件描述符集 合來(lái)傳遞結(jié)果而不用迫使開(kāi)發(fā)者每次等待事件之前都必須重新準(zhǔn)備要被偵聽(tīng)的文件描述符集合,另一點(diǎn)原因就是獲取事件的時(shí)候,它無(wú)須遍歷整個(gè)被偵聽(tīng)的描述符 集,只要遍歷那些被內(nèi)核IO事件異步喚醒而加入Ready隊(duì)列的描述符集合就行了。epoll除了提供select/poll那種IO事件的電平觸發(fā) (Level Triggered)外,還提供了邊沿觸發(fā)(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態(tài),減少epoll_wait/epoll_pwait的調(diào)用,提高應(yīng)用程序效率。Linux2.6內(nèi)核中對(duì)/dev/epoll設(shè)備的訪問(wèn)的封裝(system epoll)。

這個(gè)使我們開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序更加簡(jiǎn)單,并且更加高效。

為什么要使用epoll?

同樣,我們?cè)趌inux系統(tǒng)下,影響效率的依然是I/O操作,linux提供給我們select/poll/epoll等多路復(fù)用I/O方式(kqueue暫時(shí)沒(méi)研究過(guò)),為什么我們對(duì)epoll情有獨(dú)鐘呢?原因如下:

1.文件描述符數(shù)量的對(duì)比。

epoll并沒(méi)有fd(文件描述符)的上限,它只跟系統(tǒng)內(nèi)存有關(guān),我的2G的ubuntu下查看是20480個(gè),輕松支持20W個(gè)fd。可使用如下命令查看:

cat /proc/sys/fs/file-max

再來(lái)看select/poll,有一個(gè)限定的fd的數(shù)量,linux/posix_types.h頭文件中

#define __FD_SETSIZE??? 1024

2.效率對(duì)比。

當(dāng)然了,你可以修改上述值,然后重新編譯內(nèi)核,然后再次寫(xiě)代碼,這也是沒(méi)問(wèn)題的,不過(guò)我先說(shuō)說(shuō)select/poll的機(jī)制,估計(jì)你馬上會(huì)作廢上面修改枚舉值的想法。

select/poll會(huì)因?yàn)楸O(jiān)聽(tīng)fd的數(shù)量而導(dǎo)致效率低下,因?yàn)樗禽喸兯衒d,有數(shù)據(jù)就處理,沒(méi)數(shù)據(jù)就跳過(guò),所以fd的數(shù)量會(huì)降低效率;而epoll只處理就緒的fd,它有一個(gè)就緒設(shè)備的隊(duì)列,每次只輪詢?cè)撽?duì)列的數(shù)據(jù),然后進(jìn)行處理。(先簡(jiǎn)單講一下,第二篇還會(huì)詳細(xì)講解)

3.內(nèi)存處理方式對(duì)比。

不管是哪種I/O機(jī)制,都無(wú)法避免fd在操作過(guò)程中拷貝的問(wèn)題,而epoll使用了mmap(是指文件/對(duì)象的內(nèi)存映射,被映射到多個(gè)內(nèi)存頁(yè)上),所以同一塊內(nèi)存就可以避免這個(gè)問(wèn)題。

btw:TCP/IP協(xié)議棧使用內(nèi)存池管理sk_buff結(jié)構(gòu),你還可以通過(guò)修改內(nèi)存池pool的大小,畢竟linux支持各種微調(diào)內(nèi)核。

epoll的工作方式

epoll分為兩種工作方式LT和ET。

LT(level triggered) 是默認(rèn)/缺省的工作方式,同時(shí)支持 block和no_block socket。這種工作方式下,內(nèi)核會(huì)通知你一個(gè)fd是否就緒,然后才可以對(duì)這個(gè)就緒的fd進(jìn)行I/O操作。就算你沒(méi)有任何操作,系統(tǒng)還是會(huì)繼續(xù)提示fd已經(jīng)就緒,不過(guò)這種工作方式出錯(cuò)會(huì)比較小,傳統(tǒng)的select/poll就是這種工作方式的代表。

ET(edge-triggered) 是高速工作方式,僅支持no_block socket,這種工作方式下,當(dāng)fd從未就緒變?yōu)榫途w時(shí),內(nèi)核會(huì)通知fd已經(jīng)就緒,并且內(nèi)核認(rèn)為你知道該fd已經(jīng)就緒,不會(huì)再次通知了,除非因?yàn)槟承┎僮鲗?dǎo)致fd就緒狀態(tài)發(fā)生變化。如果一直不對(duì)這個(gè)fd進(jìn)行I/O操作,導(dǎo)致fd變?yōu)槲淳途w時(shí),內(nèi)核同樣不會(huì)發(fā)送更多的通知,因?yàn)閛nly once。所以這種方式下,出錯(cuò)率比較高,需要增加一些檢測(cè)程序。

LT可以理解為水平觸發(fā),只要有數(shù)據(jù)可以讀,不管怎樣都會(huì)通知。而ET為邊緣觸發(fā),只有狀態(tài)發(fā)生變化時(shí)才會(huì)通知,可以理解為電平變化。

如何使用epoll?

使用epoll很簡(jiǎn)單,只需要

#include <sys/epoll.h>

有三個(gè)關(guān)鍵函數(shù):

int epoll_create(int size);

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

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

當(dāng)然了,不要忘記關(guān)閉函數(shù).

?

============分割線==============

這篇就講到這里了,下面兩篇主要是函數(shù)介紹,效率分析,例子。

轉(zhuǎn)載請(qǐng)注明:C++愛(ài)好者博客???淺析epoll-為何多路復(fù)用I/O要使用epoll

總結(jié)

以上是生活随笔為你收集整理的浅析epoll-为何多路复用I/O要使用epoll的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 激情久久av | 蜜臀av免费一区二区三区水牛 | 黄色av免费网站 | 国产精品一区二区三区免费在线观看 | a免费视频| 美女张开腿流出白浆 | 国产91在线观看丝袜 | 91黄在线观看 | 夜夜嗨av禁果av粉嫩avhd | 足疗店女技师按摩毛片 | 免费a级片视频 | 欧洲成人一区二区三区 | 日韩激情啪啪 | 特大黑人娇小亚洲女 | 草久久av| 天天插天天插 | 小视频成人| 色综合久久88色综合天天 | 欧美精品在线视频 | www奇米影视com | 黄色片子视频 | 久久久久久久久久一级 | 黄色在线视频网址 | 黄色av片三级三级三级免费看 | 丰满肥臀噗嗤啊x99av | 91一区二区三区在线观看 | 波多野结衣1区 | 国产亚洲成人av | 亚洲码无人客一区二区三区 | 女优一区二区三区 | 麻豆导航 | 久久精品电影 | 少妇一级免费 | 69色堂| www.尤物 | 国产精品国产三级国产aⅴ中文 | 日本三级理论片 | 曰本女人与公拘交酡 | 97人人爽人人 | 欧美亚洲国产视频 | 国产一区亚洲二区三区 | 乱日视频 | 3d欧美精品动漫xxxx无尽 | 国产一区二区三区四区五区在线 | 国产真实乱人偷精品人妻 | 天天天天干| 亚洲精品成人区在线观看 | 日本不卡免费 | 欧美亚韩一区二区三区 | 亚洲精品一区二三区 | 亚洲自拍偷拍图 | 色播开心网 | 久操伊人 | 香蕉在线影院 | 国产色播| 青青草视频在线免费观看 | 欧美aa大片 | 2019中文字幕在线免费观看 | 熟女高潮一区二区三区视频 | 免费在线观看成人av | 国产精品久久午夜夜伦鲁鲁 | 长腿校花无力呻吟娇喘的视频 | 粗大的内捧猛烈进出在线视频 | 免费啪视频在线观看 | 久久久久久久久久免费视频 | 黄色片视频免费在线观看 | 久色91 | 国产精品国色综合久久 | 涩涩在线播放 | 公与妇乱理三级xxx www色 | 久久久亚洲一区 | 国产欧美一区二区精品久久久 | 亚洲一卡二卡在线观看 | 国产乱子伦一区二区 | 日本一区二区三区在线看 | 一级性生活黄色片 | 视频1区2区| 精品无码国产av一区二区三区 | 亚洲欧美精品一区二区三区 | 国产+高潮+白浆+无码 | 中文在线免费视频 | 亚洲好看站| 曰批又黄又爽免费视频 | 国产黄色免费在线观看 | av影院在线播放 | 6699嫩草久久久精品影院 | 青青艹av| 久久国产精品一区 | 免费做a爰片77777 | 欧美少妇18p| 午夜性福利视频 | 一区二区成人精品 | 日韩在线你懂的 | 成人黄色在线网站 | 国产三级免费观看 | 国产福利免费在线观看 | 欧美大片免费观看网址 | 成年人在线观看视频网站 | 久草精品在线 |