原創做品,轉載請註明出處:http://www.cnblogs.com/albert1017/p/3914149.html html
看了一些這兩個概念的解釋,感受不分場景的籠統理解是不對的,下面陳述一下個人理解:異步
這是兩對概念,用在不一樣的語境會有一些不一樣的含義,不能一律而論。函數
總體來講,同步就是兩種東西經過一種機制實現步調一致,異步是兩種東西沒必要步調一致。ui
1、同步調用與異步調用:spa
在用在調用場景中,無非是對調用結果的不一樣處理。.net
我理解同步調用就是調用一但返回,就能知道結果,而異步是返回時不必定知道結果,還得經過其餘機制來獲知結果,如:線程
a. 狀態
b. 通知
c. 回調函數unix
這裏的同步調用不必定會阻塞,例如當即返回失敗的結果。htm
而異步調用當即返回時,你還拿不到結果的。對象
2、同步線程與異步線程:
同步線程:即兩個線程步調要一致,要相互協商。兩個線程的運行進度各不相同,怎麼才能步調一致呢?咱們直觀的理解就是,快的等慢的唄!快的阻塞一下等到慢的步調一致便可。
異步線程:步調不用一致,各自按各自的步調運行,不受另外一個線程的影響。
同步是指兩個線程的運行是相關的,其中一個線程可能要阻塞等待另一個線程的運行;
異步的意思是兩個線程毫無相關,本身運行本身的。
3、同步通訊與異步通訊:
這裏的同步和異步是指:發送方和接收方是否協調步調一致!
同步通訊是指:發送方和接收方經過必定機制,實現收發步調協調。如:發送方發出數據後,等接收方發回響應之後才發下一個數據包的通信方式
異步通訊是指:發送方的發送無論接收方的接收狀態,如:發送方發出數據後,不等接收方發回響應,接着發送下個數據包的通信方式。
阻塞和非阻塞就比較容易理解了,沒有上面那麼多場景,阻塞就是這個事情阻到這兒了,不能繼續往下幹事了,非阻塞就是這個事情不會阻礙你繼續幹後面的事情。
阻塞能夠是實現同步的一種手段!例如兩個東西須要同步,一旦出現不一樣步狀況,我就阻塞快的一方,使雙方達到同步。
同步是兩個對象之間的關係,而阻塞是一個對象的狀態。
另外在寫這個之前參考的文章:
http://blog.chinaunix.net/uid-21411227-id-1826898.html
http://blog.chinaunix.net/uid-26000296-id-3754118.html
歡迎留言指出問題!