同步、異步、壅塞與非壅塞

轉載自
https://www.zhihu.com/questio…

在現實運用中,只要三種挪用體式格局:同步-壅塞、同步-非壅塞和異步

同步 (synchronous) vs. 異步 (asynchronous)

同步和異步關注的是音訊通訊機制

  • 同步:發出一個挪用,在沒有取得效果之前,該挪用不返回。一旦挪用返回,就取得返回值了。
  • 異步:發出一個挪用,這個挪用就直接返回了,所以沒有返回效果。當被挪用者取得效果,會運用其他體式格局來關照挪用者,或許經由過程回調函數來處置懲罰這個挪用。

舉個淺顯的例子:

  • 你打電話問書店老闆有無《分佈式體系》這本書。假如是同步通訊機制,書店老闆會說,你稍等,”我查一下”,然後最先查啊查,等查好了(多是5秒,也多是一天)通知你效果(返回效果)。
  • 而異步通訊機制,書店老闆直接通知你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回效果)。然後查好了,他會主動打電話給你(回調函數)。

壅塞 (blocking) vs. 非壅塞 (non-blocking)

壅塞和非壅塞關注的是順序在守候挪用效果時的狀況

  • 壅塞挪用:在挪用效果返回之前,當前線程會被掛起。挪用線程只要在取得效果以後才會返回。
  • 非壅塞挪用:在不能馬上取得效果時,該挪用不會壅塞當前線程。

照樣上面的例子:

  • 你打電話問書店老闆有無《分佈式體系》這本書。假如是壅塞式挪用,你會一向守候,直到取得這本書有無的效果。
  • 假如黑白壅塞式挪用,你不論老闆有無通知你,你本身先一邊去玩了。你可能要偶然過幾分鐘訊問一下老闆有無返回效果(異步-輪詢),或許讓老闆主動打電話來通知你效果(異步-回調)。
    原文作者:Zack
    原文地址: https://segmentfault.com/a/1190000014644776
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞