1. 程式人生 > >五種IO模型

五種IO模型

1、阻塞IO (1)概念:在核心將資料準備好之前,系統呼叫會一直等待。所有的套接字,預設情況都是阻塞方式。 (2)阻塞IO的工作流程: 在這裡插入圖片描述 2、非阻塞IO (1)概念:如果核心還未將資料準備好,系統呼叫仍然會直接返回,並且返回EWOULDBLOCK錯誤碼。 (2)非阻塞的工作流程: 在這裡插入圖片描述 注意:非阻塞IO往往需要程式設計師以迴圈的方式反覆嘗試讀寫檔案描述符,這個過程稱為輪詢。這個過程對CPU來說是較大的浪費,一般只有在特定的場景下才使用。 3、訊號驅動IO (1)概念:核心將資料準備好的時候,使用SIGIO訊號通知應用程式進行IO操作。 (2)訊號驅動IO的工作流程: 在這裡插入圖片描述 4、IO多路轉接 (1)概念:IO多路轉接與阻塞IO相似,不同的是IO多路轉接能夠同時等待多個檔案描述符的就緒狀態。 (2)IO多路轉接的工作流程: 在這裡插入圖片描述

5、非同步IO (1)概念:由核心在資料拷貝完成時,通知應用程式(而訊號驅動是告訴應用程式何時可以開始拷貝資料)。 (2)非同步IO的工作流程: 在這裡插入圖片描述 6、小結 (1)任何IO過程中都包含兩個步䠫:第一是等待;第二是拷貝。在實際的應用場景中等待消耗的時間往往都遠遠高於拷貝的時間,所以讓IO更高效的最核心辦法是減少等待的時間。 (2)網路IO好比釣魚,釣魚的人就是一個應用程序,等待魚上鉤就是網路中等待資料準備好的過程,魚上鉤了,把魚拉上岸就是核心複製資料階段。 1)阻塞IO模型就好比我們去釣魚,拋竿之後就一直在岸邊等,直到等待魚上鉤,然後再一次拋竿,等待下一條魚上鉤……等待的時候,什麼事情也不做。 2)非阻塞IO就好比我們拋竿入水之後就看下魚漂是否有動靜,如果沒有魚上鉤,就去幹點別的事情,過一會兒又來看看魚漂是否有魚上鉤。這樣往返的檢查又離開,直到魚上鉤,再進行處理。 3)訊號驅動IO就好比我們給魚竿上掛一個鈴鐺,當有魚上鉤的時候,這個鈴鐺就會被碰響,就把魚拉上岸來。 4)多路轉接IO就好比一個人拋下多根魚竿,只要其中一根魚竿有魚上鉤就把它拉上岸來,這樣做的好處是減少了等待的時間。 5)非同步IO就好比釣魚人僱了一個人給他釣魚,等魚上鉤,然後把魚拉上岸來之後再告訴釣魚的人。