1、一分钟弄懂同步,异步,阻塞,非阻塞

章节概览

Netty源码分析章节概览


1、概述

不管是什么开发语言,都会涉及到网络编程。在分布式计算、存储、微服务中,网络编程作为底层的核心支柱技术必不可少。以Java开发语言为例,我们经历了从BIO,NIO,AIO的不同阶段。但是每个阶段都是围绕着几个概念展开:同步,异步,阻塞,非阻塞。这边文章我们用浅显易懂的案例去说明这些概念。


2、场景描述

为了更好的讲解,我们以身边的订外卖为场景进行详细说明

2.1、场景一:阻塞

小明在努力的工作,由于工作过于投入,错过了以往订外卖的时间。之前小明都是在11点订外卖的,然后12点左右可以送达。现在时间是12点了,同事们都在吃饭,而小明只能拿手机订外卖,等着外卖的送达,饿的毫无心思去工作。

以上的这个场景,我们注意到,小明等着外卖的送达,在等待的过程中没有做任何事情。这个过程就是阻塞的过程。

2.2、场景二:非阻塞

小明还是在努力的工作。他打开手机一看,11点,刚好可以订外卖,于是他订了外卖。订了外卖以后,他又投入都自己的工作中。

在这个场景中,小明订完外卖以后,又投入到工作中,这个过程就是非阻塞,因为小明不是一直等着外卖的送达

2.3、场景三:同步

配送员收到订单以后,开始派送外卖。不巧的是,外卖延迟半个多小时还没送过来。打电话给配送员,倒霉的是配送员电话没人接听。小明只能打开地图,时刻的关注着外卖小哥的位置信息。

这个过程中,小明必须隔几分钟看下外卖小哥的位置。对外卖小哥而言,他是处于同步状态。

2.4、场景四:异步

配送员接收到订单以后,在规定的时间里送达。到了小明的办公地点,打电话给小明,同时小明下来取餐。

这个过程中就是异步的。外卖小哥达到地点以后,打电话通知,而不需要小明一直看着地图。这个时候我们说外卖小哥是异步状态。


3、总结

通过上面的几个场景描述。我们可以发现。如果小明代表着客户单,而配送员代表着服务器。那么存在以下的几种情况:
同步阻塞:场景1,场景3
同步非阻塞:场景1,场景4
异步阻塞:场景2,场景3(大多数情况下,这个是没啥意义的)
异步非阻塞:场景2,场景4(最理想的状态)

其中,同步异步描述的是服务端的状态。阻塞非阻塞描述的是客户端的状态。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章