同步异步阻塞非阻塞

同步异步阻塞非阻塞教程

很多人会对同步异步,阻塞非阻塞的概念比较模糊。其实同步和异步属于服务端的概念,阻塞和非阻塞属于客户端概念。

同步/异步

同步和异步是指服务端数据响应的方式。

同步:当客户端向服务端发起请求,服务端处理,然后将处理后的结果返回给客户端,服务端处理的结果是客户端查询到的。

异步:当客户端请求后,就立刻返回了,不管了。服务端收到请求后就默默处理相应的请求信息,服务端处理完之后会调用客户端相应接口,通知客户端处理结果。

阻塞/非阻塞

阻塞和非阻塞是指客户端处理方式。

阻塞:当客户端向服务端发起请求的时候,如果这个时候服务端处理数据需要一段时间,没有响应,那么客户端会一直等待,直到服务端将处理结果返回。

非阻塞:当客户端向服务端发起请求的时候,如果服务端处理逻辑需要一段时间,客户端会收到服务端它已经收到处理请求的响应,这个响应没有处理结果,只是告诉客户端,我收到了你这个请求了,我会慢慢处理的。客户端这个时候会做其他的事情,然后过一段时间再去服务端查询刚刚请求的处理结果。如果没有查询到处理结果,过一段时间之后再去查询,不停重复,直到获取到结果为止。

烧水案例

我们可以用生活中的真实案例来了解一下,以我们烧水为例。我们可以把烧水的人看作客户端,烧水的水壶作为服务端。

同步:当你烧水的时候,水可以一直在那边烧,你可以搬个小板凳在那边等待水烧开,或者你去看电视,过一段时间来看水有没有烧开。这个烧开水的结果是你自己去获取的。就像服务端处理的结果是客户端去获取到的。所以就是同步。

异步:当你烧水的时候,你把水装进水壶,然后就去看电视不管了,等水壶里面的水烧开了,它会发出一种刺耳的声音,这个时候你就知道水开了,就会去水壶那边倒开水。这个时候水壶里面水烧开的结果是水壶提醒你的,就好比服务端处理结束之后将处理结果主动通知客户端,所以是异步。

阻塞:当你烧水的时候,你就搬个小板凳坐那边,啥事都不干,就眼巴巴的看着水壶里面水烧的情况。水烧开了,你倒水。这个时候你除了等待水开之外啥都不干。就相当于客户端一直等待服务端的结果,所以是阻塞的。

非阻塞:当你烧开水的时候,你把水壶和水准备好,然后就离开了,去做其他事情,比如看书,看电视,然后隔几分钟过来看下,隔几分钟过来看下,它不影响你做其他事情。这就好比客户端发起请求后没有获取到服务端处理结果,然后客户端会过一段时间去查询处理结果,不停轮询,直到获取到处理结果。这样的过程就是非阻塞的。

总结

本章,我们了解了同步、异步、阻塞和非阻塞的概念。同步异步是针对于服务端而言的,阻塞非阻塞时针对客户端而言的。如果理清了这样的概念,那么对理解同步、异步、阻塞和非阻塞的概念会有很大的帮助。