1. 程式人生 > 實用技巧 >Linux|五種io模型

Linux|五種io模型

一.阻塞io

二.非阻塞io

三.訊號驅動io

四.io多路轉接

五.非同步io


一.阻塞io

1.基本概念:

在核心將資料準備好之前,系統呼叫會一直等待。所有的套接字預設都是阻塞方式。直到核心將資料準備好,從核心拷貝到使用者空間,系統呼叫才會返回。

2.舉例:把魚鉤扔到水裡,人(相當於系統)一直坐著等待魚上鉤。直到魚上鉤了,釣魚的人才收網。

二.非阻塞io

1.概念:如果核心還未將資料準備好,系統呼叫仍然會直接返回,並且返回ewouldblock錯誤碼。非阻塞io往往需要程式設計師迴圈反覆嘗試讀寫檔案描述符,這個過程稱為輪詢。這對cpu來書是較大的浪費,一般只有特定場景下才使用。

2.舉例:

釣魚者將魚鉤扔到水裡,每過一段時間去看是否有魚上鉤,直到有魚上鉤才將魚鉤拉起來。

三.訊號驅動io

1.概念:核心將資料準備好的時候,使用SIGIO訊號通知應用程式進行io操作

2.舉例:

就像是在魚竿上裝了一個報警器,當魚上鉤時通知釣魚者,釣魚者去打魚。

四.io多路轉接

從流程上與阻塞io類似。實際上最核心在於io多路轉接能夠同時等待多個檔案描述符的就緒狀態

五.非同步io

1.概念

由核心在資料拷貝完成時,通知應用程序(而訊號驅動是告訴應用程式何時可以開始拷貝資料)

2.舉例

把魚竿扔到水裡,讓家人幫忙看著,把魚釣起來後通知我。