同步VS異步,阻塞VS非阻塞

同步VS異步


同步和異步關注的是消息通信機制(Synchronous / Asynchronous Communication)

  • 同步:發出一個"調用"時,在沒有得到結果返回前,該"調用"就不返回。一旦調用返回,就得到返回值了。

  • 異步:"調用"發出後,這個調用直接返回了,所以沒有返回結果,即不會立即得到返回結果。而是在"調用"發出後,被調用者通過狀態、通知來通知調用者,或通過回調函數處理這個調用。


抄個例子:

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


阻塞VS非阻塞


阻塞和非阻塞關注的是 程序在等待調用結果(消息,返回值)時的自身狀態。

  • 阻塞:是指在調用結果返回前,當前線程被掛起。調用線程只有在得到結果之後纔會返回。

  • 非阻塞:即便不能立刻得到結果之前,該調用不會阻塞當前進程。


抄個例子:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章