Skip to content

Latest commit

 

History

History
18 lines (9 loc) · 1.35 KB

理解阻塞非阻塞和异步操作.md

File metadata and controls

18 lines (9 loc) · 1.35 KB

理解任务执行的不同方式对于构建一个可伸缩的解决方案非常重要。正确的运用异步、阻塞和非阻塞操作能大大改善系统的响应时间。

理解阻塞操作

可以用银行职员服务客户的例子来看阻塞操作。当轮到客户的号码时,银行职员就只为该客户服务直到服务完成。银行职员不能同时为多个客户办理业务。当只有2名银行职员但是每小时来100名顾客时,进度就会很缓慢。这个例子就描述了阻塞操作,当一个任务要等待另一个任务结束时,阻塞其对资源的访问。

理解非阻塞操作

非阻塞操作和异步操作很容易混淆,它们是不同的概念。用一个现实的场景来说明,比如你去银行咨询一个业务,银行职员说现在还没有结果,你稍后再来或者过几天再来。这就是非阻塞操作。

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回,之后再retry。

理解异步操作

假设有两个银行职员,没个职员有10个助理。这时,如果来了一个客户,他需要办理的业务耗时比较长,那么就请一个助理到后台单独为该客户服务。这样就不会阻塞其他客户。

注册一个回调函数,当条件满足时会触发该函数。