同步与阻塞

小明想要买一杯咖啡,后面的人在排队,只有一个服务员

  1. 同步阻塞:小明霸占着服务员盯着☕️做好;v1 (原始, v1.1 升级成了多个柜台)
  2. 同步非阻塞:小明在柜台旁边(后面排队的人接着点),和其他等待的人一起不断的问☕️咖啡好了吗;v2 (通过遍历等待来提升效率)
  3. 异步阻塞:小明付款之后回家等待快递送过来(后面排队的人接着点),等待过程什么都不做;(一件事很重要一定要等他返回,这是可以不阻塞但是要变成阻塞的)
  4. 异步非阻塞:小明付款之后回家等待快递送过来(后面排队的人接着点),一边和女朋友聊天;v3 (有了通知机制,不需要自己遍历了)

下个定义

所以, 同步异步是说有没有人通知你,需不需要主动去(盯着/问)

阻塞非阻塞是指:一件事是立马返回还是必须要等待他才能返回

非阻塞才能异步

实现异步的前提就是有一个地方是不阻塞的。如果所有地方都卡住怎么可能实现异步。阻塞异步是主动把不阻塞的逻辑变成了阻塞逻辑。

最后再举个例子

想知道知道一个快递到了没有,

  1. 没有快递员,我可以蹲在快递站死等(同步阻塞),也可以每天去一次邮局看看有没有消息(同步非阻塞)。
  2. 有快递员主动通知,我可以先干别的等他通知我(异步非阻塞),也可能这件事很重要,一定要等着,什么也不干(异步,但是主动阻塞)