同步 非同步 阻塞 非阻塞區別與聯絡

2022-06-19 07:39:09 字數 796 閱讀 9097

在io和網路程式設計中,我們經常看到幾個概念:同步、非同步、阻塞、非阻塞。

同步和非同步是針對應用程式和核心的互動而言的,同步指的是使用者程序觸發io 操作並等待或者輪詢的去檢視io 操作是否就緒,而非同步是指使用者程序觸發io 操作以後便開始做自己的事情,而當io 操作已經完成的時候會得到io 完成的通知。

阻塞和非阻塞是針對於程序在訪問資料的時候,根據io操作的就緒狀態來採取的不同方式,說白了是一種讀取或者寫入操作方法的實現方式,阻塞方式下讀取或者寫入函式將一直等待,而非阻塞方式下,讀取或者寫入方法會立即返回乙個狀態值。

乍一看這四個概念的解釋會瞬間感到頭大,也經常講同步非同步等同於阻塞非阻塞,其實,區分他們非常簡單。

同步非同步與阻塞非阻塞的主要區別是針對物件不同。

同步非同步是針對呼叫者來說的,呼叫者發起乙個請求後,一直幹等被呼叫者的反饋就是同步,不必等去做別的事就是非同步。

阻塞非阻塞是針對被呼叫者來說的,被呼叫者收到乙個請求後,做完請求任務後才給出反饋就是阻塞,收到請求直接給出反饋再去做任務就是非阻塞。

在公交站等公交

對呼叫者-乘客而言:

1,一直幹望著公交來的方向,就是同步。

2,不望著公交來的方向,掏出筆記本改bug,聽公交站廣播是否到車,就是非同步。

對被動用者-公交系統而言:

1,公交站有廣播的就是非阻塞的。

2,公交站沒有廣播的就是阻塞的。

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

對於發生一次網路io,可以分為兩部分 1 等待資料 阻塞 執行緒一直阻塞等待資料。非阻塞 執行緒傳送請求後,不等待資料,通過輪詢 訊號量等方式去獲取資料是否準備好。2 將資料從核心複製到使用者空間 同步 執行緒自己把資料從核心複製到使用者空間,期間不能做其它事情,一直等待資料複製完畢。非同步 系統核...

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

老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻塞 老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺...

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

為了弄清這幾個概念還和同事討論了一番,然後還查了一些資料,總結一下。同步與非同步是在客戶端向服務端發請求的時候,客戶端做出的處理方式。同步 客戶端向服務端發出乙個請求,客戶端就一直在等著服務端的返回結果。非同步 客戶端向服務端發出乙個請求並向伺服器說 你處理完了通知我一聲哦,我就不在這兒一直等著了。...