同步、异步、阻塞、非阻塞的理解
有关这四个概念总会混淆,前几天特意查了下,简单理解了下这四个概念,若理解的不对,希望大家指正。
一、同步异步
同步是调用者发出请求后,一直等待被调用者响应 ,如果被调用者没有响应那会一直不返回。以买书为例,如下:
异步是调用者发出请求后,接着返回,当然这次返回是没有返回值的,只有当被调用者完成当前业务逻辑,会主动去通知调用者。具体如下:
![这里写图片描述](https://img-blog.csdn.net/20180611080223909?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvaGFxaXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
二、阻塞非阻塞
阻塞是线程在发出请求,在得到消息之前,会一直挂起,只有得到结果之后,才会返回。
非阻塞是线程在发出请求,当前线程不会挂起,而是返回去接着做别的事情,但是自己会主动回来check
下被调用者对请求的处理情况。
![这里写图片描述](https://img-blog.csdn.net/2018061108244429?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvaGFxaXlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
三、同步异步
与 阻塞非阻塞
的区别
1、关注点不同
同步异步
关注的是整个访问过程中的消息通信体制。
阻塞非阻塞
关注的是线程在等待调用结果时,自己的状态。
2、范围不同
同步异步
是更广的层次上,对整个访问过程,处理情况的描述。
阻塞非阻塞
仅是单方面(线程)上的,在访问过程中,对自己所处状态的一种描述。(是否等待?)
关于更详细的内容可以参考这篇文章:同步异步阻塞非阻塞的理解