阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态,是对客户端说的
同步和异步是通信机制,是对服务端说的
拿餐厅吃饭举例:
同步:
客人(客户端)去餐厅(服务端)吃饭,点了一杯饮料,然后餐厅(服务端)从接受到请求开始,开始制作饮料,然后制作好了,立马交给客人
餐厅做完了给你
异步:
客人(客户端)去餐厅(服务端)吃饭,点了一堆东西,餐厅不能马上给客人,但是会给客人一个号码牌,叫客人去几号桌子上面等,过一段时间之后,餐厅将所有的菜和饮料啥的一起端到你的桌子上。
餐厅先给你一个号码牌,然后制作,做完了再给你(这和消息队列是一样的,把任务放到消息队列里面,告诉客户端你的操作已经成功提交,但是这时候服务端还没执行完毕,只是先告诉你)
阻塞:
阻塞和非阻塞就是对客户端,也就是调用发起方来说,我一直站着柜台这里等,等我的饮料,等我的菜(如果,服务端也就是餐厅能马上提供客户要的东西,阻塞是非常有价值的,但是如果时间要很久,干等就很傻)
非阻塞:
非阻塞就是,哇,等的时间太长了,我去那个椅子上面坐一下,打把游戏,等他弄好了,我再去接我的美食。
然后就有下面这张表
通信机制 | 通信机制 | ||
同步 | 异步 | ||
调用状态 | 阻塞 | 同步阻塞 | 异步阻塞 |
调用状态 | 非阻塞 | 同步非阻塞 | 异步非阻塞 |
References: