同步与异步
同步与异步:被调用者是否主动告诉调用者结果,重心是被调用者。
同步与异步通常用来形容一次调用,关注的是消息通信机制。同步调用一旦开始,调用者必须等到调用返回后,才能进行后续的行为。也就是说,调用者主动等待调用的结果。
而异步则是相反,异步调用发出后,调用就会立即返回,告诉调用者我方收到请求已经去处理,调用者可以继续后续的操作。异步调用的操作通常在另外一个线程内真实的执行,完成后主动通知调用者。整个过程,不会阻碍调用者工作。
情景案例:烧水壶
阻塞与非阻塞
在线程状态的角度,阻塞占了线程6种状态的3种。
在线程发出请求的角度,我是调用者,我调用一个东西后,在结果返回之前,是否还能做其他事。阻塞和非阻塞的重心是调用者。
情景案例:烧水壶
四种组合
同步与阻塞、异步与非阻塞是比较容易混淆的概念。同步等价于阻塞,异步等价于非阻塞是理解上的误区,是不正确的。
- 同步阻塞:以烧水壶为例,按下烧水开关之后,我们什么也不做,就一直在那等着,这就叫阻塞;而同步是用来形容水壶的,它不会主动告诉我们结果,需要我们一直盯着水壶是否烧开。
- 同步非阻塞:非阻塞是指按下烧水开关之后,继续干其他事情。由于是同步的,水壶不会主动告诉我们水是否烧开。因此我们可以每隔几分钟去看下水壶情况。
- 异步阻塞:异步表示水壶具有提醒功能,发出声音。我们按下烧水开关之后,仍然坐等着,直到水壶发出提醒水烧开,我们将水壶取下来。
- 异步非阻塞:按下烧水开关后,我们就去干其他事情,听到水壶烧开声音后,取下水壶。