阻塞和非阻塞關注的是程式在等待調用結果(消息,傳回值)時的狀态,是對用戶端說的
同步和異步是通信機制,是對服務端說的
拿餐廳吃飯舉例:
同步:
客人(用戶端)去餐廳(服務端)吃飯,點了一杯飲料,然後餐廳(服務端)從接受到請求開始,開始制作飲料,然後制作好了,立馬交給客人
餐廳做完了給你
異步:
客人(用戶端)去餐廳(服務端)吃飯,點了一堆東西,餐廳不能馬上給客人,但是會給客人一個号碼牌,叫客人去幾号桌子上面等,過一段時間之後,餐廳将所有的菜和飲料啥的一起端到你的桌子上。
餐廳先給你一個号碼牌,然後制作,做完了再給你(這和消息隊列是一樣的,把任務放到消息隊列裡面,告訴用戶端你的操作已經成功送出,但是這時候服務端還沒執行完畢,隻是先告訴你)
阻塞:
阻塞和非阻塞就是對用戶端,也就是調用發起方來說,我一直站着櫃台這裡等,等我的飲料,等我的菜(如果,服務端也就是餐廳能馬上提供客戶要的東西,阻塞是非常有價值的,但是如果時間要很久,幹等就很傻)
非阻塞:
非阻塞就是,哇,等的時間太長了,我去那個椅子上面坐一下,打把遊戲,等他弄好了,我再去接我的美食。
然後就有下面這張表
通信機制 | 通信機制 | ||
同步 | 異步 | ||
調用狀态 | 阻塞 | 同步阻塞 | 異步阻塞 |
調用狀态 | 非阻塞 |
References:
- https://www.zhihu.com/question/19732473
- https://zhuanlan.zhihu.com/p/67452727