Linux IO模型

啊浪的部落格發表於2017-11-05

IO操作步驟

(1)發起IO請求:IO請求一般需要請求特殊資源(如磁碟、RAM、檔案、網路),當資源被上一個使用者使用沒有被釋放時,IO請求就會被阻塞,直到能夠使用這個資源。

(2)實際IO操作:真正進行資料接收(資料複製)




IO分類

步驟1(發起IO請求):分為阻塞IO非阻塞IO,區別主要是看發起IO請求是否阻塞程式。

1、應用程式呼叫後,不能立即返回的稱為阻塞IO,即資源不可用時,IO請求一直阻塞,直到反饋結果(有資料或超時)。

2、能立即返回的稱為非阻塞IO,資源不可用時,IO請求離開返回,返回資料標識資源不可用

 

步驟2(實際IO操作):分為同步IO非同步IO,區別主要看實際IO操作是否阻塞程式。

1、在將資料從核心拷貝到使用者空間時,將資料拷貝到應用緩衝區期間是否阻塞,也就是說,如果實際IO讀寫阻塞請求程式(應用阻塞在傳送或接收資料的狀態,直到資料成功傳輸或返回失敗),那麼就是同步IO

2、如果不阻塞,而是作業系統幫你做完IO操作再將結果返回給你(應用傳送或接收資料後立刻返回,資料寫入OS快取,由OS完成資料傳送或接收,並返回成功或失敗的資訊給應用),那麼就是非同步IO





 

 



前4種屬於同步IO,最後一種才是非同步IO。雖然(2)(3)(4)種IO是非阻塞IO,但其實也只是同步非阻塞,不能算非同步




 

相關文章