首先我们要清楚同步异步和阻塞非阻塞是两种不同的概念,针对的是不同的层面:
- 同步异步:关注的是消息通信的层面。
- 阻塞非阻塞:关注的是程序在等待调用结果时的状态。
同步异步
同步:强调在发出一个请求或功能调用时,主动等待返回结果。在结果没得到前,不能返回或向下执行。
异步:强调在发出一个请求或功能调用时,不用等结果,继续向下执行,当有结果时,由被调用方通知主调方,主调方再拿结果
示例:
情景:你打电话到书店问老板有没有《操作系统》这本书。
同步情况:你等着老板去找书然后反馈给你结果。着重点在于你等待结果。
异步情况:你告诉老板,你先找,找到了回电话给我说结果。着重点是你不等待结果。
阻塞非阻塞
阻塞:就是程序执行到某一处条件未满足,程序则等待条件满足,满足后返回。
非阻塞:程序执行到某一处条件未满足则返回失败,不会使程序阻塞在这个地方。
还是以上述例子来讲:
阻塞情况:如果老板没有返回结果,你就把自己“挂起”,一直等着老板的结果。