1. 程式人生 > >阻塞非阻塞與同步非同步

阻塞非阻塞與同步非同步

1.同步與非同步
同步和非同步關注的是訊息通訊機制 (synchronous communication/ asynchronous communication)
所謂同步,就是在發出一個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。
換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。

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

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

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

關於同步非同步、阻塞非阻塞的概念: 同步就是同步,非同步就是非同步! 目前應用中阻塞和非阻塞是針對同步應用而言。關於這些概念之間的關係的理解,可以通過以下幾個例子來說明。

例子1:老闆佈置了一個調研任務,老闆自己需要寫一個調研報告。這個調研的一個子任務由同學A完成,老闆最終需要將同學A的任務整合到自己的調研報告中。因為老闆的調研報告需要用到同學A的調研結果,那麼老闆的調研報告就必須等到同學A調研完成以後才能完成。那麼在整個調研的過程中,最終的調研報告和同學A的調研任務之間就是同步關係,因為兩個任務之間有著時序的關係

阻塞可以是實現同步的一種手段!例如兩個東西需要同步,一旦出現不同步情況,我就阻塞快的一方,使雙方達到同步。

本篇文章來源於 Linux公社網站(www.linuxidc.com) 原文連結:http://www.linuxidc.com/Linux/2015-07/120338.htm