IO概念 5種IO模型

2021-09-02 04:53:01 字數 2018 閱讀 2645

io叫做輸入輸出,我們可以將io理解為兩步:

等待io事件就緒

資料就緒後進行真正意義上的io(真正的資料搬遷)

所以,io的過程一是等,然後才是輸入輸出。

進而,我們可以得到評價io是否高效的標準:

在io過程中「等」的比重越小的效能越好,越大的效能越低。
io中有兩個重要的函式:read&write

他們也有兩個功能:

等獲取/寫資料

等就是不能讀和寫,也就是寫/讀條件不就緒,即傳送/接收緩衝區沒有被寫滿,所以讀寫事件是否就緒通常要與檔案描述符相關。

先給大家講乙個釣魚的故事٩(๑>◡<๑)۶

風和日麗的一天,張鐵鎚拿著魚竿和小板凳,提著桶,來到小河邊釣魚。

他先給魚竿上放好魚餌,然後就坐在自己的小板凳上,眼睛一直瞪著魚竿的盡頭。等到魚上鉤後,自己收竿把魚放在桶裡。
不一會,李狗蛋也來了。

他也和王鐵鎚一樣,上好魚餌之後就等魚上鉤。但他的做法是一邊玩手機,一邊瞄著魚竿是否有動靜,還不時的和王鐵鎚搭訕,但王鐵鎚並不理他,因為他在一動不動的盯著魚竿,不能分心。
又過了一會,趙二毛也來湊熱鬧了,

但他多拿了一樣東西———鈴鐺,他把鈴鐺繫在魚竿上,然後坐在小板凳上,拿出了一本《c和指標》看起了書,這樣鈴鐺一響就直接收竿。嗯,文化人就是不一樣。
今天釣魚的人真不少,劉翠花也過來了,

但她放了個大招,直接拿了100多隻魚竿,全固定在岸邊。這樣幾乎不用等,水池邊全是她收竿的身影。不一會兒,就釣了好幾桶魚。
王老五看見這麼多人釣魚,頓時興致也來了,但人家是老闆,還有事要做。

於是吩咐司機讓他去釣魚,釣到了魚就打**通知他。只能說,有錢人就是不一樣。
好了,我們的故事就講到這裡。

其實,釣魚的過程和io非常類似,要先等魚上鉤,然後才真正開始釣魚。所以,上邊的5個人實際上就對應了5種io模型。

用這種講故事的方式來介紹5種io模型還是太口語化了,還是讓我們嚴肅一點吧 (。◕ˇ∀ˇ◕)

阻塞io

對於王鐵鎚,他一直看著魚竿,自己等,自己釣,而且等的過程中不做其他的事。這就是阻塞io:

阻塞式等待io事件,在等的過程中不能做其他事。
非阻塞io

對於李狗蛋,他也是自己等,自己釣。但他並不是一直盯著魚竿,而是時刻檢測釣魚事件是否就緒,沒有就做其他的事(玩手機、搭訕)。這就是非阻塞io:

非阻塞等待,不斷檢測io事件是否就緒。沒有就緒就可以做其他事。
訊號驅動io

對於趙二毛,他將釣魚事件是否就緒的資訊轉移到鈴鐺上,不用自己檢測事件就緒,只需要將鈴鐺作為訊號通知方式。這就是訊號驅動io:

linux用套介面進行訊號驅動io,安裝乙個訊號處理函式,程序繼續執行並不阻塞,當io時間就緒,程序收到sigio訊號。然後處理io事件。
io復用/多路轉接io

對於劉翠花,她也是自己等,自己釣。但可以同時等待多個魚上鉤事件。這樣她釣到魚的概率就很大,等的時間短,效率明顯比其他人高。這就是多路轉接io:

linux用select/poll函式實現io復用模型,這兩個函式也會使程序阻塞,但是和阻塞io所不同的是這兩個函式可以同時阻塞多個io操作。而且可以同時對多個讀操作、寫操作的io函式進行檢測。知道有資料可讀或可寫時,才真正呼叫io操作函式

非同步io

對於王老五(老闆),他並沒有經過等的過程,只需要發起事件(讓司機釣魚),然後享受結果。這就是非同步io:

linux中,可以呼叫aio_read函式告訴核心描述字緩衝區指標和緩衝區的大小、檔案偏移及通知的方式,然後立即返回,當核心將資料拷貝到緩衝區後,再通知應用程式。

前4種模型都有等和io兩個階段,並將資料從核心拷貝到呼叫者的緩衝區,自己等,自己進行資料搬遷。所以統稱為同步io。 與第5種非同步io相區分。

注:這裡同步/非同步的概念與程序&執行緒中的概念不同,不同的背景下應該有不同的理解。

原文:

網路I O模型 5種常見的網路I O模型

阻塞與非阻塞 阻塞就是卡在那兒什麼也不做,雙方之間也沒有資訊溝通。非阻塞就是即使對方不能馬上完成請求,雙方之間也有資訊的溝通。同步與非同步 同步就是一件事件只由乙個過程處理完成,不論阻塞與非阻塞,最後完成這個事情的都是同乙個過程 非同步就是一件事由兩個過程完成,前面乙個過程通知,後面乙個過程接受返回...

Unix下5種I O模型

unix下的5中i o模型 阻塞式i o 非阻塞式i o i o復用 select poll 訊號驅動式i o sigio 非同步i o posix的aio 系列函式 乙個輸入操作通常包括兩個不同階段 1 等待資料準備好 2 從核心向程序複製資料 對於套接字上的輸入操作,第一步等待資料從網路中到達,...

Unix下5種I O模型

unix下i o模型主要分為5種 1 阻塞式i o 2 非阻塞式i o 3 i o復用 select和poll 4 訊號驅動式i o 5 非同步i o 1 阻塞式i o模型 unix基本的套接字介面,例如 connect accept read write recv send recvfrom se...