iOS 并发和并行 串行和并行 同步和异步的问题

感觉对这部分知识点有些模糊,在这里做个总结,加深下印象。

1.并发和并行

并发: 单核处理器情况下,cpu快速的切换任务,达到一个时间段“同时”执行多个任务的效果。比如你听音乐的同时打LOL,cpu是快速的在LOL和音乐播放器之间切换,来处理两者的任务,只不过这个切换速度非常快,快到你感觉不到而已。所以,并发是就一段时间而言的,但是在某一时刻cpu只能处理LOL或音乐播放器中的一个。

并行:并行就是在同一时刻处理多个(跟核数有关)任务,因为每个核都能处理任务。

所以并发是单核处理器下一个时间段中处理多个任务,并行是多核处理器下同一时刻处理多个任务。(多核才可以并行,并且多核中的每个核都能并发)

2.串行和并行

这个“并行”与“并发和并行”中的“并行”不是同一个概念。“并发和并行”中的“并行”是就cpu而言的,是cpu架构。在这里串行和并行是就iOS开发中GCD中的队列而言的。

队列只负责管理任务而不负责执行任务。

串行队列:字面意思一个接一个的执行。队列会把任务一个接一个的放到同一个线程中执行,不会创建新线程,所以后一个只能等前一个执行完才能执行。

并行队列:字面意思就是并列执行。队列会根据实际需要开辟新的线程来执行任务,从而达到并行的目的,所以后一个不用等待前一个执行完。

一句话就是并行队列具有开辟新线程执行任务(并行)的能力,而串行队列不具有这个能力。

3.同步和异步

同步:阻塞当前线程,直到目标任务执行完。dispatch_sync,提交到队列并立即执行。

异步:不阻塞当前线程。dispatch_async,提交到队列并交由队列来管理执行,执行时间不确定。

4.同步/异步 + 串行/并行

同步+串行:顺序执行

同步+并行:顺序执行

异步+串行:顺序执行

异步+并行:异步执行

 

将任务同步提交到当前串行队列则会出现死锁:1.同步提交阻塞当前线程 2.同步提交要求立即执行 二者矛盾,永远不会执行

将任务同步提交到当前并行队列:1.同步提交阻塞当前线程 2.并行队列创建新线程执行新提交任务  任务正常执行。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值