同步与异步、阻塞与非阻塞
最近在复习Java IO模型,其中对于同步与异步、阻塞与非阻塞概念的理解一直不够深入。在看了多篇前人总结的博客之后,对于这二者的区别终于有点领悟。
一、概念
同步
A调用B,B处理直到获得结果,才返回给A。需要调用者一直等待和确认调用结果是否返回,然后继续往下执行。
异步
A调用B,无需等待结果,B通过状态通知A或回调函数来处理。调用结果返回时,会以消息或回调的方式通知调用者。
阻塞
A调用B,A被挂起直到B返回结果给A,才能继续执行。
调用结果返回前,当前线程挂起不能够处理其他任务,一直等待调用结果返回。
非阻塞
A调用B,A不会被挂起,A可以执行其他操作。
调用结果返回前,当前线程不挂起,可以处理其他任务。
二、两者区别
同步异步是个操作方式,阻塞非阻塞是线程的一种状态。
同步异步指的是被调用者结果返回时通知线程的一种机制,阻塞非阻塞指的是调用结果返回进程前的状态,是挂起还是继续处理其他任务。
下面是我认为两篇写得比较清晰也比较简洁的博客。
https://www.cnblogs.com/pengsixiong/p/5556403.html
https://www.jianshu.com/p/9fa26b0b22a0