异步非阻塞模式(五分钟捋清同步)
前言
重大新闻预报:您的假期已经不足!!!
国庆的最后一天,还是娱乐娱乐,发一篇阅读性的文章吧~~
这是一遍短小的阅读性文章,内容简明扼要的展开:同步、异步、阻塞、非阻塞、并发、并行的概念。让我们在繁忙的工作之余,读点不那么干货,却又诚意满满的小短文吧~
正文一切的开始,让我们从一个小故事出发:(故事灵感来自互联网)
一个小故事
故事:小A烧开水。
出场人物:小A
出场道具:普通水壶(放在煤气灶上的那种,为了方便简称:水壶);会响的水壶(水烧开了会响的那种,简称:响壶)。
故事目的:小A要拿开水泡咖啡
小A为了实现目的,指定了4个计划:
1、用水壶烧水,并且站在煤气灶旁边,啥事不干,两眼直勾勾的盯着水壶,等水烧开。烧开后就去泡咖啡。-同步阻塞
假设烧水和泡咖啡是在同一个线程中执行。
2、仍然用水壶煮水,不过此时不再傻傻得站在那里看水开没开,而是去玩局LOL,每当自己死了,就过来看看水开了没有。如果水开了就去泡咖啡。-同步非阻塞
假设这里玩LOL,是另一个线程运行的。
3、动用响壶烧水,仍然站在煤气灶旁边,不过此时不两眼直勾勾的盯着壶了,而是听响,因为响壶水开时会用响声通知小A。-异步阻塞
4、在计划3的基础上,小A不站在煤气灶旁边了,而是去玩局LOL,等听到响壶的声音提醒后,再去跑咖啡。-异步非阻塞
有了上边的故事铺垫,我们再来看一看概念
同步:
同步这个词在很多场合下都会被使用,如果单从字面意思来看:相同的步骤。但是在编程的领域里讲,字面意思就不那么准确了。
对于编程领域来说,同步就是发起一个请求,直到请求返回结果之后,才进行下一步操作。简单来说,同步就是必须一件事一件事的做,等前一件做完了,才能做下一件事。
例子:此种模式很常见,比如我发起一个网络请求查询一个人的身份证,然后根据身份证查看这个人的详细信息。那么我查询详细信息的操作需要等待查询身份证的操作,那么此时查询身份证的操作就是一个同步操作。
异步:
异步很明显是与同步相对,二者的区别在于是否需要等待某操作的返回结果。简单来说,我们还是一个网络请求,如果我们此时不需要依赖这个请求的结果就能进行后续操作,那么此时这个网络请求就是一个异步操作。
当一个异步操作发出后,调用者在没有得到结果之前,可以继续执行后续操作。这就是异步。
同步和异步的区别:
二者的区别还是很明显的:请求发出后,是否需要等待请求结果,才能继续执行其他操作。
阻塞
阻塞的概念往往伴随这线程。阻塞一般是指:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作。
非阻塞
那么非阻塞,毫无疑问是阻塞的反向操作。非阻塞式的调用指:在结果没有返回之前,该调用不会阻塞住当前线程。
是不是感觉阻塞/非阻塞和同步/异步有异曲同工的地方?
其实,这两者存在本质的区别,面向的对象是不同的。
- 阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作。
- 同步/异步:数据如果尚未就绪,是否需要等待数据结果。
并发和并行
二者的区分度非常的高,就在于四个字:是否同时。
并发:当有多个线程在操作时,如果系统只有一个CPU,操作系统只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的快速的切换不同的线程代码运行。
并行:当系统有多个CPU时,可以存在当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行。
举个小例子
小A吃饭吃到一半,电话来了,小A一直到吃完了以后才去接。即不支持并发也不支持并行
小A吃饭吃到一半,电话来了,小A停了下来接了电话,接完后继续吃饭。支持并发
小A吃饭吃到一半,电话来了,小A一边打电话一边吃饭。支持并行
尾声文章到此就结束,不知道这几个概念解释的还清楚么。希望能对各位小伙伴有些帮助吧~
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com