什么是 GCD?下面是苹果的官方说明。
Grand Central Dispatch (GCD) 是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的 Dispatch Queue 中,GCD 就能生成必要的线程并计划执行任务。也就是说 GCD 用我们难以置信的非常简洁的计述方法,实现了极为复杂繁琐的多线程编程。
一个 CPU 一次只能执行一个命令,不能执行某处分开的并列的两个命令,因此通过 CPU 执行的 CPU 命令列就好比一条无分叉的大道,其执行不会出现分歧。 这里所说的 "一个 CPU 执行的 CPU 命令列为一条无分叉的路径" 即为 "线程"。
现在一个物理的 CPU 芯片实际上有 64 个(64 核)CPU,如果一个 CPU 核虚拟为两个 CPU 核工作,那么一台计算机上使用多个 CPU 核就是理所当然的事了,尽管如此 "一个 CPU 执行的 CPU 命令列为一条无分叉的路径" 仍然 不变。这种无分叉的路径不止有一条,存在有多条时即为 "多线程"
由于使用多线程的程序可以在摸个线程和其他线程之间反复多次进行上下文切换,因此看上去好像 1 个 CPU 核能够并列的执行多个线程一样,而且在具有多个 CPU 核的情况下,就不是 "看上去像" 了,而是真的提供了多个 CPU 核并行执行多个线程的技术。
这种利用多线程编程的技术就被称为 "多线程编程"。
开发者要做的只是定义想执行的任务并追加到适当的 Dispatch Queue 中。
- dispatch_async(queue, ^{
- //想要执行的任务
- });
该代码使用 Block 语法 "定义想执行的任务" ,通过 dispatch_async 函数 "追加" 赋值在变量 queue 的 Dispatch Queue 中,仅这样就可使指定的 Block 在另一个线程执行。 Dispatch Queue 是什么?如其名称所示,是执行处理的等待队列。应用程序编程人员通过 dispatch_async 函数等 API,在 Block 语法中计述想执行的处理并追加到 Dispatch Queue 中。Dispatch Queue 按追加顺序(先进先出 FIFO,First-In-First-Out)执行处理。
执行处理时存在两种 Dispatch Queue,一种是等待现在执行中处理的
,另一种是不等待现在执行中处理的
- Serial Dispatch Queue
。
- Concurrent Dispatch Queue
Dispatch Queue 种类 | 说明 |
---|---|
Serial Dispatch Queue (串行) | 等待现在执行中处理结束 |
Concurrent Dispatch Queue (并行) | 不等待现在执行中处理结束 |
来源: https://juejin.im/post/5a320ea45188257a3e4eacd4