作業系統在處理io的時候,主要有兩個階段:
我們一般將上述過程簡化理解為:
select,poll,epoll都是io多路復用的機制。i/o多路復用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程式進行相應的讀寫操作。但select,poll,epoll本質上都是同步i/o,因為他們都需要在讀寫事件就緒後自己負責進行讀寫,也就是說這個讀寫過程是阻塞的,而非同步i/o則無需自己負責進行讀寫,非同步i/o的實現會負責把資料從核心拷貝到使用者空間。
單個程序就可以同時處理多個網路連線的io請求(同時阻塞多個io操作)。基本原理就是程式呼叫select,然後整個程式就阻塞狀態,這時候,kernel核心就會輪詢檢查所有select負責的檔案描述符fd,當找到其中那個的資料準備好了檔案描述符,會返回給select,select通知系統呼叫,將資料從kernel核心複製到程序緩衝區(使用者空間)。
下圖為select同時從多個客戶端接受資料的過程
雖然伺服器程序會被select阻塞,但是select會利用核心不斷輪詢監聽其他客戶端的io操作是否完成
poll的原理與select非常相似,差別如下:
select的幾大缺點:
(1)每次呼叫select,都需要把fd集合從使用者態拷貝到核心態,這個開銷在fd很多時會很大
(2)同時每次呼叫select都需要在核心遍歷傳遞進來的所有fd,這個開銷在fd很多時也很大
(3)select支援的檔案描述符數量太小了,預設是1024
epoll 提供了三個函式:
epoll解決的問題:
select, poll和epoll的區別
我只用過select select 最不能忍受的是乙個程序所開啟的fd是有一定限制的,由fd setsize設定,預設值是2048。對於那些需要支援的上萬連線數目的im伺服器來說顯然太少了,select要掃瞄各個檔案描述符,而epool採用mmap更高效 select 系統呼叫提供乙個機制來實現同步...
select poll和epoll的區別
select,poll,epoll都是io多路復用的機制。i o多路復用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒 一般是讀就緒或者寫就緒 能夠通知程式進行相應的讀寫操作。select僅僅知道i o事件發生的檔案描述符的數量,但並不知道是哪幾個 1 時間複雜度 o n 2 優點 跨平台支...
select,poll和epoll的API複習筆記
環境 centos7 xshell 前言 select poll epoll 的區別一定要清楚 select 優點是跨平台,而poll相對其沒有1024檔案描述符的限制,共有的缺點是 1.每次監聽都需要將監聽的資訊從應用層拷貝到核心。2.返回變化的檔案描述符的個數,具體哪個檔案描述符變化需要遍歷。3...