前言
同步、异步、阻塞、非阻塞,这些词是不是听过很多遍,但是究竟是什么意思?编码界黑话吗?哥带你搞懂基本概念,一分钟之后你将会超越99%的同行!是不是有点小激动,来,上车!
什么是同步
同步:事情之间相互依赖,A、B、C三个事情按顺序执行,C的开始需要依赖于B的结果,B的开始需要依赖于A的结果,这个过程叫做同步。
现实世界中,你想约你在 Java | 动态代理及作用 里面撩到的女友出去吃饭,给她打电话,一直不接,于是你继续打,直到她接听了你的电话,然后她同意和你一起出去吃饭。你打电话直到女友接听的这个过程,就是同步。
什么是异步
异步:事情之间相对独立,A、B、C三个事情各自执行,A执行完之后回调或者通知B,B执行完之后回调或者通知C,在各自拿到其他事情的结果之前,可以先处理自己那部分的事情,这个过程叫做异步。
异步过程同样也发生在你约女友吃饭之后的情节中,你带着她去沙县国际集团吃小吃,排队的人太多,你不急不忙的找到一个靠窗的二人小饭桌,拿出你双卡双待有着炫彩跑马灯的美帝苹果手机,潇洒扫一扫,花6元巨款RMB点了两碗葱香飘面 飘葱香面 ,额,反正就是两碗面,然后安心坐着拉你的女友打情骂俏谈情说爱,直到老板喊你端面,你才清醒过来到了吃面的时间。你找桌、和女友互撩的过程丝毫没有被排队点餐所影响,这个过程就是现实世界中的异步。
什么是阻塞
阻塞:在同步的定义中,C的操作必须等待B完成,B的操作必须等待A完成,这个叫做阻塞。
同样,在上面的故事中,你一直打电话,直到女友接听,在你打电话约女友的过程中你不做别的,就使劲打电话,这个就是傻乎乎的阻塞行为。
什么是非阻塞
非阻塞:基于异步的定义,B、C各自执行,B调用完A,A回复'收到',A并不是及时把处理结果返回给B,而是在回调的时候把结果通知给B,这个叫做非阻塞。
在故事中,你扫码下单之后返回给你一个排队号,表示老板已经收到你的订单请求,但是当老板做好了两碗面大喊:38号!这时才把真正的处理结果返回给你,整个下单、取餐的过程丝毫不影响你和女友桌面互撩。
最后
就是四个基本定义的排列组合了:
同步阻塞、同步非阻塞、异步阻塞、异步非阻塞
好了,一分钟完了,是不是很快很通透?有没有想再来一分钟?