同步與異步、阻塞與非阻塞

最近在複習Java IO模型,其中對於同步與異步、阻塞與非阻塞概念的理解一直不夠深刻。在看了多篇前人總結的博客以後,對於這兩者的區別終於有點領悟。html

1、概念

同步

A調用B,B處理直到得到結果,才返回給A。須要調用者一直等待和確認調用結果是否返回,而後繼續往下執行。異步

異步

A調用B,無需等待結果,B經過狀態通知A或回調函數來處理。調用結果返回時,會以消息或回調的方式通知調用者。函數

阻塞

A調用B,A被掛起直到B返回結果給A,才能繼續執行。
調用結果返回前,當前線程掛起不可以處理其餘任務,一直等待調用結果返回。線程

非阻塞

A調用B,A不會被掛起,A能夠執行其餘操做。
調用結果返回前,當前線程不掛起,能夠處理其餘任務。htm

2、二者區別

同步異步是個操做方式,阻塞非阻塞是線程的一種狀態。blog

同步異步指的是被調用者結果返回時通知線程的一種機制,阻塞非阻塞指的是調用結果返回進程前的狀態,是掛起仍是繼續處理其餘任務。進程

下面是我認爲兩篇寫得比較清晰也比較簡潔的博客。
http://www.javashuo.com/article/p-bdkgfkut-dv.html
https://www.jianshu.com/p/9fa26b0b22a0get

相關文章
相關標籤/搜索