实用的 Swift 并发

Practical Swift Concurrency

充分利用 Swift 5.7 及更高版本中的并发性

关于本书

Practical Swift Concurrency 是Donny Wals撰写的一本书,面向想要了解更多如何在应用程序中利用 Swift Concurrency 的中高级开发人员。本书将使用 Donny 独特的实用方法带您踏上 Swift 并发之旅。我们将重点关注 Swift Concurrency 的重要细节,这将帮助您为尽快使用 Concurrency 奠定坚实的基础。

您的 Swift 并发之旅将从 Swift 中可用并发结构的总体概述开始。之后,您将等待第一个方法调用,并逐步构建一个复杂且高度并发的系统。我们还介绍了重要的技能,例如测试异步代码以及通过 Instruments 分析和调试代码。

换句话说,《实用 Swift 并发》可帮助您围绕所有基本思想、概念和原则构建强大的基础和心智模型,让您能够在 Swift 中启动并运行并发,而不会使任何事情变得比需要的更加复杂。

获得实用的 Swift 并发

章节概述

第 1 章:了解编程中的并发性

在本书的第一章中,我们将对代码中的并发性有一个基本的了解。与其他代码同时运行代码意味着什么?并行运行代码意味着什么?异步是什么意思?

第一章并不旨在让您掌握与并发相关的所有内容。它旨在帮助您建立一个基线,我们将在本书中以此为基础。

第 2 章:了解 Swift 预并发中的异步编程

尽管 Swift 并发一直部署到 iOS 13,但我认为向您展示 async/await 和其他 Swift 并发功能出现之前 Swift 中常用的机制是有意义的。

我们将简要介绍一下 Grand Central Dispatch。在并发出现之前,GCD 一直是 iOS 开发人员的“首选”并发实用程序。你不会学到 GCD 的所有复杂细节;实在是太多了。相反,我们将重点关注 GCD 遇到的一些问题,以及为什么 Swift Concurrency 将解决这些问题。

第 3 章:等待你的第一个异步方法

本章的目的是逐步向您介绍 Swift Concurrency。我们将了解 async/await、抛出异步和非抛出异步的基本语法。您将了解异步和同步上下文,以及如何进入异步上下文。

我们还将深入研究并简要了解当您等待某些事情时会发生什么;这又回到了第一章。您还将了解如何编写自己的异步函数,以及这些函数如何“不必”挂起。

到本章结束时,您将能够开始编写第一个异步代码,并且在执行此操作时您将充满信心!

第 4 章:了解 Swift Concurrency 的任务

任务是 Swift 中并发性的基本构建部分。在本章中,您将学习有关任务以及它们之间如何相互关联所需了解的所有内容。在本章结束时,您应该对代码在生成任务时如何工作有一个很好的了解,并且您将了解:

  • 我们不讨论 Swift Concurrency 中的线程
  • 任务本质上就是新的线程
  • 我们的线程永远不会超过CPU核心数,以避免线程爆炸

第 5 章:现有代码和 Swift 并发

本章承认开发人员并不总是在新的代码库上工作。我们将研究将现有的基于回调的代码桥接到 async/await 世​​界的方法。您将了解延续以及如何使用它们将“常规”代码转换为异步等待代码。

您还将首先了解通过获取单个值(如网络调用)的代码并等待第一个发出的值,将合并代码桥接到异步等待中。在接下来的章节中,您将正确介绍 AsyncSequence 以迭代多个发出的值。

第 6 章:使用 Swift Concurrency 防止数据争用

Swift Concurrency 的一个巨大特点是 Actor 的存在。在本章中,我们将深入探讨演员。您将了解参与者如何确保对其状态的访问不存在数据竞争。

我们还将关注全球演员,特别是主要演员。您将了解全局主要参与者如何工作,以及为什么它是 Swift Concurrency 系统的重要组成部分。

我们还将探索 Sendable 协议以及 @Sendable 闭包。您将了解什么是可发送性以及它为何如此重要。本章还探讨了 Swift Concurrency 如何致力于确保我们的代码在编译器级别上是线程安全的。

第 7 章:使用异步流

在本章中,您将了解 Swift Concurrency 的“AsyncSequence”协议,以及如何使用它来迭代以异步方式生成或获取其数据的集合。我们将从探索一种内置机制开始,该机制允许我们在从网络获取每一行后立即逐行接收和处理 URL 的内容。

之后,我们将了解如何使用“AsyncStream”通过构建 Websocket 连接的包装器来构建您自己的值流。

在本章结束时,您将深入了解 Swift Concurrency 如何允许我们迭代异步集合,以及如何利用内置机制来构建您自己的异步值序列。

第 8 章:异步算法和组合

在第 7 章中,我们了解了异步序列以及如何在 Swift 中使用它们。Apple 的组合框架和我们可以使用 Swift Concurrency 做的事情之间有很多相似之处。在本章中,您将详细了解异步序列和组合之间的异同。

我们还将了解 Apple 作为 Swift 包发布的异步算法包,我们可以选择在我们的项目中使用它。该包提供了我们在合并中具有的某些功能,但不适用于开箱即用的异步序列。有了这个包,我们可以更接近Combine 的功能。

第 9 章:并行执行和等待工作

等待异步工作很棒,因为这意味着我们可以在用户滚动内容列表时执行诸如进行网络调用之类的操作。实际上,并发的真正威力不是异步执行一项任务,而是并行执行多项任务。

在本章中,您将了解 async let 和任务组,以及这两个工具如何允许您生成作为另一个任务的子任务并行运行的任务。您将看到我们如何利用这些工具来构建高度并发的数据获取器,以并行进行数百个网络调用。

我们还将使用本章中的信息作为充分理解结构化并发及其含义的桥梁。

第 10 章:Swift 并发和单元测试

在本章中,您将了解 XCTest 以及它在多大程度上支持测试异步代码。您将了解如何编写等待异步函数的异步测试以及使用异步序列的代码测试。

在本章结束时,您将确切地知道如何测试异步代码,以及在哪里可以使用更老式的测试方法。

第 11 章:调试和分析异步代码

本书的最后一章完全关注仪器。了解如何利用 Instruments 来分析和调试代码对于保持良好的性能以及在出现问题时提高性能至关重要。

我们将通过检查 Instruments 如何可视化我们的任务来开始本章。您将了解有关任务可能处于的不同状态的更多信息,并且您将了解如何查看代码中某些任务之间的结构化并发关系。

之后,您将了解如何深入了解参与者如何安排工作,以及该安排如何影响您的任务。我们将开发一个存在一些明显性能问题的示例应用程序,您将看到我们如何解决这些问题,同时通过 Instruments 不断验证我们的工作。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。