同步阻塞 同步非阻塞 非同步區別

2021-10-19 07:33:21 字數 1149 閱讀 8607

對於發生一次網路io,可以分為兩部分:

1、等待資料:

阻塞:執行緒一直阻塞等待資料。

非阻塞:執行緒傳送請求後,不等待資料,通過輪詢/訊號量等方式去獲取資料是否準備好。

2、將資料從核心複製到使用者空間:

同步:執行緒自己把資料從核心複製到使用者空間,期間不能做其它事情,一直等待資料複製完畢。       

非同步:系統核心把資料從核心複製到使用者空間,然後再通知相應執行緒進行資料處理。

總結:阻塞/非阻塞:發生請求後,是否等待接收方處理好資料(是否等待資料處理好)。   

同步/非同步:    執行緒是否需要等待資料從核心複製到使用者空間(是否等待資料複製)。(沒有非同步阻塞、非同步非阻塞之分,非同步必定非阻塞)

再結合以下的io模型圖來理解:

同步阻塞io:阻塞等待資料(阻塞),準備好資料後,等待資料從核心複製到使用者空間(同步)

同步非阻塞io:發生請求後,輪詢資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)

同步非阻塞io(訊號驅動io):發生請求後,核心通過訊號量標誌資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)

同步非阻塞io(多路復用o):阻塞在select,發生請求後註冊socket到select,select輪詢多個socket資料是否準備好(非阻塞);準備好資料後,傳送資料複製命令,等待資料從核心複製到使用者空間(同步)

非同步io:發生請求後,不需等待資料是否準備好(非阻塞);準備好資料後,核心會把資料從核心複製到使用者空間,然後傳送訊號通知資料已經複製完成(非同步)

阻塞,非阻塞,非同步,同步

之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...

同步 非同步 阻塞 非阻塞

故事 老王燒開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 老王想了想,有好幾種等待方式 1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。同步阻塞 老王想了想,這種方法不夠聰明。2.老王還是用水壺煮水,不再傻傻的站在那裡看水開,跑去寢室上網,但是...