IO多路復用

2022-06-16 23:51:15 字數 652 閱讀 5000

概要

使用非阻塞io 的應用程式通常使用io多路復用函式 查詢裝置是否可以立即訪問。io多路復用 對應的驅動需要實現檔案操作的poll()函式。

io多路函式呼叫的時候,每個驅動的poll()介面會呼叫到,執行io多路函式的程序被掛到每個驅動的等待佇列上,可以被任何乙個驅動喚醒。

poll函式實現模板

poll(struct file *file, poll_table *wait)

使用者空間程式設計介面

select()

poll()

epoll()  // 不會隨fd數目增長而降低效能,select和poll則會.

epll機制的使用者空間程式設計介面:

epoll_create()

epoll_ctl()

epoll_wait()

epoll監聽事件:

epollet: 設定fd為edge triggered模式。預設是level triggered模式。lt就是核心通知應用fd就緒後,如果應用不執行io操作,核心會多次傳送通知。 而et模式就是核心通知應用fd就緒後,假設應用已經處理不會再傳送通知。

epolloneshot: 指一次性監聽。即監聽完fd事件後,如果需要繼續監聽那麼需要再次把fd加入到epoll佇列裡。

I O多路復用

一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...

i o多路復用

最常見的i o多路復用就是 select poll epoll了,下面說說他們的一些特點和區別吧。select 可讀 可寫 異常三種檔案描述符集的申明和初始化。fd set readfds,writefds,exceptionfds fd zero readfds fd zero writefds ...

I O多路復用

我們都知道unix like 世界裡,一切皆檔案,而檔案是什麼呢?檔案就是一串二進位製流而已,不管socket,還是fifo 管道 終端,對我們來說,一切都是檔案,一切都是流。在資訊 交換的過程中,我們都是對這些流進行資料的收發操作,簡稱為i o操作 input and output 往流中讀出資料...