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

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

1.并发和并行

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

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

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

2.串行和并行

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

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

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

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

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

3.同步和异步

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

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

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

同步+串行:顺序执行

同步+并行:顺序执行

异步+串行:顺序执行

异步+并行:异步执行

 

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

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

 

你可能感兴趣的:(日常总结,个人总结)