/* Page prose (zh-Hans) */
"WrappingUp" = "# 小结\n\nGCD 的全部承诺就是：你不再管理线程，而是开始把闭包交给**队列**。熟悉哪个队列做什么，以及 `async` 对 `sync` 这个唯一的决定，剩下的都是细节。大多数尖锐的边角都围绕着 `sync`，所以在你伸手去用它之前，先读一读下面的要点。\n\n* **GCD 替你管理线程。**你把闭包交给**队列**；你不自己创建线程。\n* 三种队列：**主队列**（UI，串行）、**全局队列**（共享后台，并发）和**自定义队列**（`DispatchQueue(label:)`，默认串行）。当你要保护状态或给一条工作线命名时，用自定义队列；至于“把这个移出主线程”，`global()` 更简单。\n* **`async`** 调度工作并立即返回；**`sync`** 阻塞当前线程直到工作完成。你几乎总是想要 `async`。\n* **串行**队列保证顺序且不重叠；**并发**队列并行运行任务并按任意顺序完成。永远不要依赖那个完成顺序。\n* 核心模式是**在后台队列上工作，然后跳回 `DispatchQueue.main.async` 去更新 UI**：在主线程之外操作 UI 是未定义行为。\n* **QoS** 告诉 GCD 工作有多紧急；通过问是否有人在等待、以及他们是否在看着，来选择它。\n* **陷阱：**从主线程调用 `main.sync` 会**死锁**。永远不要这样做。\n\n---\n\n## 接下来\n\n接下来是 **[组与信号量](Groups%20and%20Semaphores.playgroundchapter/Overview)**：如何等待整批被调度的工作完成，以及如何限制同时有多少任务触碰一个资源。\n\n[上一页](@previous)  |  第 9 / 9 页";
