java nio-理解同步、非同步,阻塞和非阻塞

來源:互聯網
上載者:User

標籤:機制   sync   通知   ble   async   方式   com   tar   java   

理解同步、非同步,阻塞和非阻塞 結論:阻塞、非阻塞與是否同步非同步無關。  轉自知乎

“阻塞”與"非阻塞"與"同步"與“非同步"不能簡單的從字面理解,提供一個從分布式系統角度的回答。
1.同步與非同步
同步和非同步關注的是 訊息通訊機制 (synchronous communication/ asynchronous communication)
所謂同步,就是在發出一個*調用*時,在沒有得到結果之前,該*調用*就不返回。但是一旦調用返回,就得到傳回值了。
換句話說,就是由*調用者*主動等待這個*調用*的結果。

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

典型的非同步編程模型比如Node.js

舉個通俗的例子:
你打電話問書店老闆有沒有《分布式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。
而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過“回電”這種方式來回調。

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

阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之後才會返回。
非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。

還是上面的例子,
你打電話問書店老闆有沒有《分布式系統》這本書,你如果是阻塞式調用,你會一直把自己“掛起”,直到得到這本書有沒有的結果,如果是非阻塞式調用,你不管老闆有沒有告訴你,你自己先一邊去玩了, 當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。
在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。

阻塞與非阻塞與是否同步非同步無關

java nio-理解同步、非同步,阻塞和非阻塞

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.