亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IO多路復用總結

發布時間:2020-07-28 10:58:45 來源:網絡 閱讀:1953 作者:馬尾和披肩 欄目:網絡安全

面試題:說出 你所知道的IO多路復用模型,并解釋為什么IO多路復用效率高?


     select poll,epoll都是IO多路復用的一種機制,就是通過一種機制可以監視多個文件描述符,一旦某個文件描述符就緒(一般是讀就緒或者寫就緒),就能夠通知進程進行相應的讀寫操作,他們三個本質上都是同步IO,因為 它們都需要在讀寫事件就緒后自己負責讀寫操作,也就是讀寫過程中是阻塞的,而異步IO無需自己進行讀寫,它只負責發起事件具體的實現由別的完成

  

select和poll的實現比較相似,epoll就是poll和select的增強版了


select:

select本質上是通過設置或者檢查存放fd標志位的數據結構來進行下一步處理。這樣所帶來的缺點是:

1、 單個進程可監視的fd數量被限制,即能監聽端口的大小有限。

      一般來說這個數目和系統內存關系很大,具體數目可以cat /proc/sys/fs/file-max察看。32位機默認是1024個。64位機默認是2048.

2、 對socket進行掃描時是線性掃描,即采用輪詢的方法,效率較低:

       當套接字比較多的時候,每次select()都要通過遍歷FD_SETSIZE個Socket來完成調度,不管哪個Socket是活躍的,都遍歷一遍。這會浪費很多CPU時間。如果能給套接字注冊某個回調函數,當他們活躍時,自動完成相關操作,那就避免了輪詢,這正是epoll與kqueue做的。

3、需要維護一個用來存放大量fd的數據結構,這樣會使得用戶空間和內核空間在傳遞該結構時復制開銷大

poll:

poll本質上和select沒有區別,它將用戶傳入的數組拷貝到內核空間,然后查詢每個fd對應的設備狀態,如果設備就緒則在設備等待隊列中加入一項并繼續遍歷,如果遍歷完所有fd后沒有發現就緒設備,則掛起當前進程,直到設備就緒或者主動超時,被喚醒后它又要再次遍歷fd。這個過程經歷了多次無謂的遍歷。

它沒有最大連接數的限制,原因是它是基于鏈表來存儲的,但是同樣有一個缺點:

1、大量的fd的數組被整體復制于用戶態和內核地址空間之間,而不管這樣的復制是不是有意義。                                                                                                                                      2、poll還有一個特點是“水平觸發”,如果報告了fd后,沒有被處理,那么下次poll時會再次報告該fd。

epoll:

epoll支持水平觸發和邊緣觸發,最大的特點在于邊緣觸發,它只告訴進程哪些fd剛剛變為就需態,并且只會通知一次。還有一個特點是,epoll使用“事件”的就緒通知方式,通過epoll_ctl注冊fd,一旦該fd就緒,內核就會采用類似callback的回調機制來激活該fd,epoll_wait便可以收到通知

epoll的優點:


1、沒有最大并發連接的限制,能打開的FD的上限遠大于1024(1G的內存上能監聽約10萬個端口);
2、效率提升,不是輪詢的方式,不會隨著FD數目的增加效率下降。只有活躍可用的FD才會調用callback函數;
      即Epoll最大的優點就在于它只管你“活躍”的連接,而跟連接總數無關,因此在實際的網絡環境中,Epoll的效率就會遠遠高于select和poll。

3、 內存拷貝,利用mmap()文件映射內存加速與內核空間的消息傳遞;即epoll使用mmap減少復制開銷。

select、poll、epoll 區別總結:

1、支持一個進程所能打開的最大連接數

IO多路復用總結

2、FD劇增后帶來的IO效率問題

IO多路復用總結

3、 消息傳遞方式

IO多路復用總結



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金川县| 鄢陵县| 漳浦县| 宿松县| 高唐县| 南丹县| 宜州市| 南开区| 观塘区| 微博| 卓尼县| 五峰| 临桂县| 汉沽区| 禹州市| 黎城县| 仙桃市| 金门县| 普宁市| 紫云| 扶沟县| 保山市| 军事| 兰西县| 阿尔山市| 高要市| 海口市| 杂多县| 长兴县| 罗江县| 长顺县| 泸溪县| 津市市| 高安市| 休宁县| 乐亭县| 延长县| 江门市| 浦城县| 波密县| 谷城县|