同步/异步的概念
- 同步:已知调用结果后才将调用返回
- 异步:不需要等待调用结果即可返回,有调用结果后,被调用方会“通知”调用方
阻塞/非阻塞的概念
- 阻塞:调用方在收到调用结果前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。
- 非阻塞:调用方在收到调用结果前,可处理其他事务
同步异步就是消息通知机制,阻塞和非阻塞在进程(线程)等待消息通知时的状态。
故事:老王烧开水
出场人物:老王,两把水壶(水壶,响水壶)
- 同步阻塞: 效率是最低的。
老王用水壶烧水,并且站在那里(阻塞),不管水开没开,每隔一定时间看看水开了没(同步->轮询)。 - 同步非阻塞: 实际上效率是低下的。
老王用水壶烧水,不再傻傻的站在那里,跑去做别的事情(非阻塞),但是还是会每个一段时间过来看看水开了没,没开就继续去做的事情(同步->轮询)。 - 异步阻塞: 效率高
老王用响水壶烧水,站在那里(阻塞),但是不再去看水开了没,而是等水开了,水壶会自动通知它(异步,内核通知进程)。 - 异步非阻塞: 效率更高,注册一个回调函数,就可以去做别的事情。
老王用响水壶烧水。跑去做别的事情(非阻塞),等待响水壶烧开水自动通知它(异步,内核通知进程)