前言
本文通过一个简单的例子带大家搞懂什么是同步和异步、堵塞和非堵塞
定义
- 同步和异步是线程的通信模式
- 堵塞和非堵塞是线程的处理模式
先给出总结性的定义,看不懂没关系,请继续往下看。
堵塞和非堵塞
首先我们举个简单的例子:
张三要去买菜,买菜的路上突然看到了一家奶茶店,于是他决定先买杯奶茶再去买菜。
张三点了奶茶后发现奶茶的制作要一定的时间,现在张三就有两个选择:
- 原地等待,等待奶茶制作好后再去买菜
- 不等了,先去买菜,买完菜后再回来取奶茶
如果张三选择了第一种选择 - 原地等待,那么我们就可以理解为张三的行动被奶茶店堵塞住了,因为他需要等到奶茶制作完毕后才能继续行动去买菜,这种模式就是堵塞。
如果张三选择了第二种,不等奶茶制作好而是先去买菜,然后再回来取奶茶,那么张三的行动就没有被堵塞住,这种模式就是非堵塞。
堵塞和非堵塞是线程的处理模式
我们可以把张三看作为线程,而买奶茶和买菜则是线程需要完成的两个任务。
我们不难发现线程的行为是否被堵塞取决于线程如何做选择或处理,若选择等待某个任务完成后再继续下一个任务&#