天天看點

同步與異步;阻塞與非阻塞

阻塞和非阻塞關注的是程式在等待調用結果(消息,傳回值)時的狀态,是對用戶端說的

同步和異步是通信機制,是對服務端說的

拿餐廳吃飯舉例:

同步:

客人(用戶端)去餐廳(服務端)吃飯,點了一杯飲料,然後餐廳(服務端)從接受到請求開始,開始制作飲料,然後制作好了,立馬交給客人

餐廳做完了給你

異步:

客人(用戶端)去餐廳(服務端)吃飯,點了一堆東西,餐廳不能馬上給客人,但是會給客人一個号碼牌,叫客人去幾号桌子上面等,過一段時間之後,餐廳将所有的菜和飲料啥的一起端到你的桌子上。

餐廳先給你一個号碼牌,然後制作,做完了再給你(這和消息隊列是一樣的,把任務放到消息隊列裡面,告訴用戶端你的操作已經成功送出,但是這時候服務端還沒執行完畢,隻是先告訴你)

阻塞:

阻塞和非阻塞就是對用戶端,也就是調用發起方來說,我一直站着櫃台這裡等,等我的飲料,等我的菜(如果,服務端也就是餐廳能馬上提供客戶要的東西,阻塞是非常有價值的,但是如果時間要很久,幹等就很傻)

非阻塞:

非阻塞就是,哇,等的時間太長了,我去那個椅子上面坐一下,打把遊戲,等他弄好了,我再去接我的美食。

然後就有下面這張表

通信機制 通信機制
同步 異步
調用狀态 阻塞 同步阻塞 異步阻塞
調用狀态 非阻塞

References:

  • ​​https://www.zhihu.com/question/19732473​​
  • ​​https://zhuanlan.zhihu.com/p/67452727​​

繼續閱讀