五大IO模型

2022-05-01 22:00:13 字數 1158 閱讀 4773

乙個輸入操作通常包括兩個階段:

對於乙個套接字上的輸入操作,第一步通常涉及等待資料從網路中到達。當所等待資料到達時,它被複製到核心中的某個緩衝區。第二步就是把資料從核心緩衝區複製到應用程序緩衝區。

unix 有五種 i/o 模型:

應用程序被阻塞,直到資料從核心緩衝區複製到應用程序緩衝區中才返回。

應該注意到,在阻塞的過程中,其它應用程序還可以執行,因此阻塞不意味著整個作業系統都被阻塞。因為其它應用程序還可以執行,所以不消耗 cpu 時間,這種模型的 cpu 利用率會比較高。

下圖中,recvfrom() 用於接收 socket 傳來的資料,並複製到應用程序的緩衝區 buf 中。這裡把 recvfrom() 當成系統呼叫。

應用程序執行系統呼叫之後,核心返回乙個錯誤碼。應用程序可以繼續執行,但是需要不斷的執行系統呼叫來獲知 i/o 是否完成,這種方式稱為輪詢(polling)。

由於 cpu 要處理更多的系統呼叫,因此這種模型的 cpu 利用率比較低。

使用 select 或者 poll 等待資料,並且可以等待多個套接字中的任何乙個變為可讀。這一過程會被阻塞,當某乙個套接字可讀時返回,之後再使用 recvfrom 把資料從核心複製到程序中。

它可以讓單個程序具有處理多個 i/o 事件的能力。又被稱為 event driven i/o,即事件驅動 i/o。

如果乙個 web 伺服器沒有 i/o 復用,那麼每乙個 socket 連線都需要建立乙個執行緒去處理。如果同時有幾萬個連線,那麼就需要建立相同數量的執行緒。相比於多程序和多執行緒技術,i/o 復用不需要程序執行緒建立和切換的開銷,系統開銷更小。

非同步 i/o:第二階段應用程序不會阻塞。

2. 

LInux五大網路IO模型

在網路環境下,通俗的講,將io分為兩步 1.等 2.資料搬遷。如果要想提高io效率,需要將等的時間降低。五種io模型包括 阻塞io 非阻塞io 訊號驅動io io多路轉接 非同步io。其中,前四個被稱為同步io。在介紹五種io模型時,我會舉生活中釣魚的例子,加深理解。1.阻塞io blocking ...

軟體工程五大模型

瀑布模型 1.里程碑或基線驅動。2.過程逆轉性很差或者說不可逆轉。逆轉可能會延誤工期,增加成本,造成損失 1.開發階段清晰,便於評審 審計 跟蹤 管理和控制。1.不可逆或很難可逆。2.問題會積累,錯誤會傳遞發散擴大,導致成本和質量失控。1.在開發時間內需求不變化或很少變化。2.分析設計人員對此領域非...

五大資料儲存模型

今天和同事聊起列式儲存clickhouse資料庫,資料庫的選擇原來這麼多。就是傳統的資料庫,如mysql,oracle,postgresql。相比較與列式儲存,最明顯的特點就是把一行中的資料值串在一起儲存起來,然後再儲存下一行的資料。列式儲存是相對於傳統的行式儲存來說的,最大區別就是資料時是按照列來...