Swift GCD

GCD

Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。

基本概念

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间

线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程

队列:是管理线程的,相当于线程池,能管理线程什么时候执行。无论什么队列和任务,线程的创建和回收不需要程序员操作,由队列负责。

串行队列:队列中的任务只会顺序执行。

并行队列:队列中的任务通常会并发执行。

全局队列:是系统的,与并行队列类似,但调试时,无法确认操作所在队列

主队列:每一个应用程序对应唯一一个主队列,在多线程开发中,使用主队列更新UI。

串行队列同步:操作不会新建线程、操作顺序执行。

串行队列异步:操作需要一个子线程,会新建线程、线程的创建和回收不需要程序员参与,操作顺序执行,“最安全的选择”。

并行队列同步:操作不会新建线程、操作顺序执行。

并行队列异步:操作会新建多个线程(有多少任务,就开N个线程执行)、操作无序执行;队列前如果有其他任务,会等待前面的任务完成之后再执行;场景:既不影响主线程,又不需要顺序执行的操作!

全局队列异步:操作会新建多个线程、操作无序执行,队列前如果有其他任务,会等待前面的任务完成之后再执行。

全局队列同步:操作不会新建线程、操作顺序执行。

主队列:操作在主线程上顺序执行,不存在异步。

图说概念

串行队列 并行队列 全局队列
同步 不创建线程,顺序执行 不创建线程,顺序执行 不创建线程,顺序执行
异步 创建一个线程,顺序执行 创建多个线程,并发执行 创建多个线程,并发执行

代码示例

在我们使用多线程的时候,主要是处理并发事件,使用下面的代码能够解决大部分场景:

1
2
3
4
5
6
7
8
DispatchQueue.global().async {
print("开始执行异步任务")
Thread.sleep(forTimeInterval: 2)
print("异步任务执行完毕")
DispatchQueue.main.async {
print("回到UI线程")
}
}