IO操做並不是是一個原子過程,而是按照必定的步驟執行,咱們以IO讀操做爲例,大概分爲兩個步驟:異步
(1)數據準備階段:數據發送到接收端的操做系統內核中操作系統
(2)數據接收階段:數據從操做系統內核拷貝到用戶存儲空間中線程
如今的一些IO模型概念基本都與這兩個操做有關,下面我一一介紹:同步
1,同步阻塞IOselect
用戶在發起一個讀數據的請求,而後調用這個請求的線程進入阻塞狀態,直到(1),(2)步驟所有作完線程才返回繼續執行下面的操做請求
2,同步非阻塞IO技術
用戶發起一個讀IO操做的請求,而後返回處理其餘事情,而後不斷地檢查,直到(1)步驟處理完畢,線程進入阻塞狀態處理(2)步驟,處理完畢以後線程返回處理其餘事情數據
3,IO 多路複用技術(同步阻塞IO的一種)阻塞
用戶發起一個讀IO請求,隨即將請求註冊到selector上面去,隨後進入阻塞狀態,當完成步驟(1)以後,由多路複用器通識請求調用者,而後以阻塞的方式開始執行步驟(2),直到執行完畢返回,線程繼續執行下面的操做回調
4,信號驅動IO
用戶發起讀IO請求以後就去作別的事情了,當操做系統執行完(1)以後以消息或者回調的方式通知調用線程,以阻塞的方式執行步驟(2),直到完成返回繼續往下執行。
5,異步非阻塞IO
用戶發起讀IO請求以後,就去作別的事情了,操做系統作完(1),(2)以後再以消息或者回調的方式通知IO調用者。
比較圖: