對於發生一次網路io,可以分為兩部分:
1、等待資料:
阻塞:執行緒一直阻塞等待資料。
非阻塞:執行緒傳送請求後,不等待資料,通過輪詢/訊號量等方式去獲取資料是否準備好。
2、將資料從核心複製到使用者空間:
同步:執行緒自己把資料從核心複製到使用者空間,期間不能做其它事情,一直等待資料複製完畢。
非同步:系統核心把資料從核心複製到使用者空間,然後再通知相應執行緒進行資料處理。
總結:阻塞/非阻塞:發生請求後,是否等待接收方處理好資料(是否等待資料處理好)。
同步/非同步: 執行緒是否需要等待資料從核心複製到使用者空間(是否等待資料複製)。(沒有非同步阻塞、非同步非阻塞之分,非同步必定非阻塞)
再結合以下的io模型圖來理解:
同步阻塞io:阻塞等待資料(阻塞),準備好資料後,等待資料從核心複製到使用者空間(同步)
同步非阻塞io:發生請求後,輪詢資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)
同步非阻塞io(訊號驅動io):發生請求後,核心通過訊號量標誌資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)
同步非阻塞io(多路復用o):阻塞在select,發生請求後註冊socket到select,select輪詢多個socket資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)
非同步io:發生請求後,不需等待資料是否準備好(非阻塞);準備好資料後,核心會把資料從核心複製到使用者空間,然後傳送訊號通知資料已經複製完成(非同步)
阻塞,非阻塞,非同步,同步
之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...
同步 非同步 阻塞 非阻塞
故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...
同步 非同步 阻塞 非阻塞
故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...