[轉]阻塞/非阻塞與同步/非同步
“阻塞”與"非阻塞"與"同步"與“非同步"不能簡單的從字面理解,提供一個從分散式系統角度的回答。
1.同步與非同步同步和非同步關注的是訊息通訊機制(synchronous communication/ asynchronous communication)
- 同步,就是在發出一個呼叫時,在沒有得到結果之前,該呼叫就不返回。但是一旦呼叫返回,就得到返回值了。換句話說,就是由呼叫者主動等待這個呼叫的結果。
- 非同步則相反,呼叫在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在呼叫發出後,被呼叫者通過狀態、通知來通知呼叫者,或通過回撥函式處理這個呼叫,
典型的非同步程式設計模型比如Node.js
。
舉個通俗的例子:你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過“回電”這種方式來回撥。
2.阻塞與非阻塞阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態。
- 阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。
- 非阻塞呼叫指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。
還是上面的例子,你打電話問書店老闆有沒有《分散式系統》這本書,你如果是阻塞式呼叫,你會一直把自己“掛起”,直到得到這本書有沒有的結果,如果是非阻塞式呼叫,你不管老闆有沒有告訴你,你自己先一邊去玩了, 當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。
如果是關心blocking IO/ asynchronous IO, 參考 Unix Network Programming View Book。
轉自知乎:怎樣理解阻塞非阻塞與同步非同步的區別?
相關文章
- 同步非同步 與 阻塞非阻塞非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步與非同步 阻塞與非阻塞非同步
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞和非阻塞非同步
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- socket阻塞與非阻塞,同步與非同步、I/O模型非同步模型
- 同步、非同步、阻塞、非阻塞的區別非同步
- 聊聊執行緒與程式 & 阻塞與非阻塞 & 同步與非同步執行緒非同步
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- [譯] 非同步程式設計:阻塞與非阻塞非同步程式設計
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- 大白話搞懂什麼是同步/非同步/阻塞/非阻塞非同步
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- 一篇文章讀懂阻塞,非阻塞,同步,非同步非同步
- ♻️同步和非同步;並行和併發;阻塞和非阻塞非同步並行
- 程式與執行緒、同步與非同步、阻塞與非阻塞、併發與並行執行緒非同步並行
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行
- 對於同步、非同步、阻塞、非阻塞的幾點淺薄理解非同步
- 併發-0-同步/非同步/阻塞/非阻塞/程式/執行緒非同步執行緒
- 【OS】同步非同步/阻塞非阻塞、併發並行序列的區分非同步並行
- 對執行緒、協程和同步非同步、阻塞非阻塞的理解執行緒非同步
- 【死磕NIO】— 阻塞、非阻塞、同步、非同步,傻傻分不清楚非同步
- Java 非阻塞 IO 和非同步 IOJava非同步
- 真正的 Tornado 非同步非阻塞非同步
- tornado非同步請求非阻塞非同步
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒