Linux|五種io模型
阿新 • • 發佈:2020-10-12
一.阻塞io
1.基本概念:
在核心將資料準備好之前,系統呼叫會一直等待。所有的套接字預設都是阻塞方式。直到核心將資料準備好,從核心拷貝到使用者空間,系統呼叫才會返回。
2.舉例:把魚鉤扔到水裡,人(相當於系統)一直坐著等待魚上鉤。直到魚上鉤了,釣魚的人才收網。
二.非阻塞io
1.概念:如果核心還未將資料準備好,系統呼叫仍然會直接返回,並且返回ewouldblock錯誤碼。非阻塞io往往需要程式設計師迴圈反覆嘗試讀寫檔案描述符,這個過程稱為輪詢。這對cpu來書是較大的浪費,一般只有特定場景下才使用。
2.舉例:
釣魚者將魚鉤扔到水裡,每過一段時間去看是否有魚上鉤,直到有魚上鉤才將魚鉤拉起來。
三.訊號驅動io
1.概念:核心將資料準備好的時候,使用SIGIO訊號通知應用程式進行io操作。
2.舉例:
就像是在魚竿上裝了一個報警器,當魚上鉤時通知釣魚者,釣魚者去打魚。
四.io多路轉接
從流程上與阻塞io類似。實際上最核心在於io多路轉接能夠同時等待多個檔案描述符的就緒狀態。
五.非同步io
1.概念
由核心在資料拷貝完成時,通知應用程序(而訊號驅動是告訴應用程式何時可以開始拷貝資料)
2.舉例
把魚竿扔到水裡,讓家人幫忙看著,把魚釣起來後通知我。