【计算机面试题】并发、并行、异步、同步

这几天,小编在面试的过程中频繁被问到并发(Concurrency)、并行(Parallelism)异步(async)同步(sync)这四个概念之间到底有什么区别和联系呢?网络上的资源层出不穷,小编不得不总结一篇博客给大家学习一下哈。
并发(Concurrency)是一个比较宽泛的概念,单纯代表计算机能够同时执行多项任务,至于计算机怎么做到并发(Concurrency)则有不同的形式。
对于单核处理器,计算机可以通过分配时间片的方式,让一个任务执行一段时间在切换到另一个任务在运行一段时间,不同的任务会这样交替反复的运行下去,这个过程也被称为是进程或者线程的上下文切换(context switching)
在这里插入图片描述
对于多核处理器,我们可以在不同的核心上真正的并行的执行任务,而不用通过分配时间片的方式运行这种情况也就是我们说的并行(Parallelism)。

在这里插入图片描述
至于同步(sync)和异步(Async)则是两种不同的编程模型。同步(sync)代表需要等待前一个任务执行完毕之后才能进行下一个任务。

a()
b()

在这里插入图片描述
因此在同步中并没有并发或者并行的概念。
而异步(async)则代表不同的任务之间并不会相互等待先后执行,也就是说你在运行任务A的时候也可以同时运行任务B

a()
b()


一个典型实现异步的方式则是通过多线程编程,可以创建多个线程,并且启动他们,并且在多核的环境下,每个线程会被分到独立的核心上运行实现真正的并行,当然如果你使用的是单核处理器的操作系统则会通过分配时间片的方式来执行这些线程,不过这些线程依然是在并发的执行
如何选择多线程编程还是单线程异步编程?
简而言之,对于IO密集的应用程序,比如iOS应用会经常执行网络请求、数据库访问,这类应用就非常适合使用异步编程的方式。
在这里插入图片描述

反之,如果我们使用多线程编程的方式则会浪费不少的系统资源。因为每个线程的绝大多数时间都在等待这些IO操作,而线程自身也会占用而外的内存,线程的切换也有有而外的开销。 而多线程编程就适合与计算量非常密集的应用程序,比如视频处理等,因为他能让CPU在尽可能运行中 而不是在等待或者切换上。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值