同步异步,并发并行

同步和异步

主要是对任务的发起方式的描述,和I/O紧密相关。

同步(synchronous): 就是按时间顺序,串行化地执行任务,每一个时间点都只有一个任务在被执行。类似于电路中的串行。

异步(asynchronous): 就是按照时间顺序,多个任务可以被分成多个分支去执行,在同一个时间点,可以有多个任务在同时被执行。类似于电路中的并行。

以一个方法被调用为例,同步执行调用该方法时,调用方一定会等待这个方法执行完毕返回结果,再执行下一步动作。而异步执行调用该方法时,调用方在调用时就已经结束了对此方法的调用,并不关心此方法的执行过程和结果,比如消息,调用方只管把消息抛入队列,至于消息什么时候被消费,消费结果怎么样,它并不等待结果,而是直接执行下一步动作,此时,在同一个时间点上,会有调用方和被调用方分别在两个线程上执行。

就好比你买东西,你去超市买,找到了商品,排队付款,然后带回家,这是一个串行化的动作。但是你在网上买,买完了之后你去吃饭,看电影,在这个吃饭和看电影的过程中,你下单买的东西也在到你家的路上,这两个任务并不冲突,同时在执行,这个就叫异步。

 

并发和并行

主要是对任务的处理方式的描述,涉及到处理器(CPU)。对于单个CPU内核来说,它在一个时间点只能处理一个任务。

并发(concurrency): 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个CPU内核上运行。就是对单个CPU内核做了任务规划,把它的档期分成很多个时间区间,每一个时间区间都最多只有一个任务在执行,但是这个任务并不会一直占用这个CPU内核,而是占用一段时间后又让位给其他任务,这样CPU内核随着时间的推移,就不断地在做任务切换,而这种切换的速度非常快,导致看起来CPU是在“同时“(注意引号)处理多个任务一样。比如操作系统,开了很多程序,一边在听歌一边在玩游戏(每一个程序都可以看着是一个进程),看起来它们好像都是同时在运行着的,但是在CPU层面,其实多个任务是在不断地来回做切换。这个叫做并发,这个技术叫做CPU的分时处理技术(Time Sharing Technique)。打个比方,人的嘴同一个时间点只能发出一种声音,这个就是单内核的单任务,但是现在有一个口技厉害的大师,他切换声音的速度非常之快,让你觉得是有多个人在发出声音一样,但实际上还是一个人在工作,这个就是并发。

并行(parallellism): 当系统有一个以上CPU或者一个CPU中有多个内核时,当执行一个任务时,另一个进程也可以在其他CPU上执行,或者在其他CPU的其他内核上面执行,两个任务互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。系统要有一机多CPU(一块主板上有多个CPU)或者多核CPU(一个CPU中有多个内核)才会出现并行。在这种情况下,才会出现真正意义上的『同时进行』。打个比方,人有两只手好比一个双内核的CPU,他练了双手互搏术,在同一时间点,他左手可以画圆,右手可以画方,这个就是并行了。成语中的并行不悖就是这个道理。

所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

并发和并行的区别

并发,指的是多个事情,在同一时间段内同时发生了。 并行,指的是多个事情,在同一时间点上同时发生了。

并发的多个任务之间是互相抢占资源的。 并行的多个任务之间是不互相抢占资源的。

只有在多CPU或多CPU内核的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。

转载于:https://my.oschina.net/u/3412738/blog/3083864

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值