關於同步與非同步和阻塞與非阻塞的解釋

2022-06-18 17:12:11 字數 996 閱讀 8925

閱讀目錄(content)

回到頂部(go to top)

同步和非同步關注的是訊息通訊機制(synchronous communication/ asynchronous communication)

所謂同步,就是在發出乙個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。

換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。

而非同步則是相反,*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當乙個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在*呼叫*發出後,*被呼叫者*通過狀態、通知來通知呼叫者,或通過**函式處理這個呼叫。

典型的非同步程式設計模型比如node.js

舉個通俗的例子:你打**問書店老闆有沒有《分布式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,」我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。

而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打**給你,然後直接掛**了(不返回結果)。然後查好了,他會主動打**給你。在這裡老闆通過「回電」這種方式來**。

阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態.

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。

非阻塞呼叫指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。

還是上面的例子,你打**問書店老闆有沒有《分布式系統》這本書,你如果是阻塞式呼叫,你會一直把自己「掛起」,直到得到這本書有沒有的結果,如果是非阻塞式呼叫,你不管老闆有沒有告訴你,你自己先一邊去玩了,

當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。

在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。

非同步與同步 阻塞和非阻塞

非同步與同步 阻塞和非阻塞 總是讓人覺得難以理解 實際上常用的函式是都是同步的,很多io函式也是預設的阻塞的。同步是最常見的,就是一步一步的執行函式,執行完返回。他簡單,你不需要額外的去考慮,這是很自然的事情。阻塞是說當檔案描述符不可用的時候,就等待,等到他可用。對於乙個函式來說,非阻塞時可以設定的...

阻塞與非阻塞 同步和非同步

阻塞與非阻塞 主要指的是訪問 io 的執行緒是否會阻塞 或者說是等待 執行緒訪問資源,該資源是否準備就緒的一種處理方式。同步和非同步 主要是指的資料的請求方式 同步和非同步是指訪問資料的一種機制 bio同步阻塞 io,block io,io 操作時會阻塞執行緒,併發處理能力低。我們熟知的 socke...

同步與非同步 阻塞與非阻塞

設想一下這個情景,你列了個購物清單 a,b,c,d 去商店買東西,你向老闆詢店問有沒有你想要的a i o操作 於是老闆去倉庫檢視,這個時候假如你在前台等待老闆查詢結果回來那麼這種詢問等待的方式為同步,此時你相當於被掛起,是處於阻塞狀態的,而如果你沒有在前台等待老闆的查詢而是接著進店逛看有沒有你想要的...