IO系列文章之一 UNIX IO模型的學習與總結

2021-09-01 17:20:27 字數 1013 閱讀 9110

原先對於io模型的認識總是很模糊,前段時間系統的學習了一下,分享出來,希望對看到的人有幫助。

unix網路程式設計中,將io模型劃分為5種:

(1)阻塞io (2)非阻塞io (3)訊號驅動io (4)io復用 (5)非同步io

1、io操作的2個步驟

以上5種io操作都分成了兩個步驟:發起io請求實際io操作

(2)實際io操作:真正進行資料接收。

2、io分類

步驟1(發起io請求):分為阻塞io非阻塞io,區別(看發起io請求是否阻塞程序):

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

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

步驟2(實際io操作):分為同步io非同步io,區別(看實際io操作是否阻塞程序):

在將資料從核心拷貝到使用者空間時,將資料拷貝到應用緩衝區期間是否阻塞。

也就是說,如果實際io讀寫阻塞請求程序(應用阻塞在傳送或接收資料的狀態,直到資料成功傳輸或返回失敗),那麼就是同步io。

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

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

阻塞io:

5種io模型比較:

IL系列文章之一 Say Hello to IL

net出現這麼久了,很多人已經能夠熟練的運用c 進行軟體開發,也有一些像我這樣的人喜歡去研究一下.net的內部執行機制。我這裡來談談il intermediate language 雖然我們不太可能直接用il來開發軟體,但是il的確是了解.net內部機制的一道大門。visual studio.net...

《python系列文章之一 python環境搭建》

python系列文章主要從入門的角度來 python。本節文章講述如何搭建python的開發環境。windows系統 mac系統 其他系統 請根據自己的作業系統選擇相應的python安裝包並安裝 2.設定相關的環境變數 系統環境變數path中新增python的安裝路徑和script路徑 3.檢視安裝...

SQL Server Index系列之一

agenda index structures primary key and clustered index constraints and indexes syntax for creating and managing indexes special indexes index access ...