Swift 异步编程术语表
Swift 自 5.5 版本引入了 async/await 和结构化并发(Structured Concurrency)之后,异步编程成为开发者需要掌握的重要技能。以下术语表整理了 Swift 异步编程中的核心术语及其定义,帮助你快速熟悉相关概念。
A
Async Function(异步函数)
使用async关键字声明的函数,表示该函数可以在执行期间暂停并等待某个异步操作完成。调用异步函数时需要使用await关键字。
示例:func fetchData() async -> DataAsync Sequence(异步序列)
一个可以通过异步迭代访问的序列,通常使用AsyncSequence协议实现,适用于处理流式数据(如网络流或文件读取)。
示例:AsyncStream是常见的异步序列实现。Async Stream(异步流)
一种实现AsyncSequence协议的具体类型,用于创建和处理连续的异步数据流。
示例:AsyncStream { continuation in ... }Await(等待)
使用await关键字来暂停执行当前函数,直到某个异步操作完成。await只能在async函数或上下文中使用。
示例:let data = await fetchData()
B
- Background Task(后台任务)
在后台优先级执行的异步任务,通常通过Task.detached或指定较低优先级来创建。
示例:Task(priority: .background) { ... }
C
Concurrency(并发)
程序在同一时间段内处理多个任务的能力。Swift 的并发模型通过async/await和Actors提供安全且高效的并发编程方式。Continuation(延续)
用于桥接旧式基于回调的 API 和现代async/await的工具。Swift 提供了withCheckedContinuation和withUnsafeContinuation来手动管理延续。
示例:withCheckedContinuation { continuation in ... }Cooperative Thread Pool(协作线程池)
Swift 并发运行时使用的线程池,任务在其中协作执行,避免了传统线程管理的复杂性。开发者无需直接管理线程,但可以通过优先级影响调度。
D
- Dispatch Queue(分发队列)
虽然不是 Swift 并发特有的术语,但在异步编程中常用于与 GCD(Grand Central Dispatch)交互。Swift 的并发可以与DispatchQueue结合使用。
G
- Global Actor(全局 Actor)
一种特殊的Actor,可以跨模块或全局使用,常见于需要全局同步的场景。@MainActor是 Swift 中的内置全局 Actor。
示例:@MainActor class MyViewModel { ... }
M
- Main Actor(主 Actor)
一个特殊的全局 Actor,确保代码在主线程执行,常用在 UI 更新等场景。
示例:@MainActor func updateUI() { ... }
R
Race Condition(竞争条件)
多个任务同时访问共享资源,导致不可预测的行为。Swift 使用Actors和结构化并发来减少竞争条件的发生。Reentrant(可重入)
描述一个函数或方法是否可以在执行期间被中断并再次调用。Swift 的Actor模型通过限制并发访问来避免重入问题。
S
Structured Concurrency(结构化并发)
Swift 并发模型的核心设计理念,确保任务的生命周期清晰且可控,避免任务泄漏或未完成的情况。
示例:通过async let或TaskGroup实现结构化并发。Suspend(挂起)
在调用await时,当前函数的执行会被挂起,等待异步操作完成后再恢复。挂起期间不会阻塞线程。
T
Task(任务)
Swift 并发中的基本执行单元,封装了一段异步代码。可以通过Task { ... }创建并运行。
示例:Task { await doSomething() }Task Group(任务组)
使用withTaskGroup创建的一组并发任务,允许开发者并行执行多个任务并等待所有任务完成。
示例:await withTaskGroup(of: Int.self) { group in ... }Task Cancellation(任务取消)
取消正在运行的任务,通常通过Task.cancel()或检查Task.isCancelled实现。Swift 的并发模型支持协作式取消。
示例:if Task.isCancelled { return }Task Priority(任务优先级)
指定任务的执行优先级(如.userInitiated、.background),影响任务在协作线程池中的调度。
示例:Task(priority: .high) { ... }
A (Actors)
Actor(演员)
一种引用类型,用于保护共享状态,防止并发访问导致的数据竞争。Actor 的方法默认是串行执行的。
示例:actor MyCounter { var count = 0 }Actor Isolation(Actor 隔离)
指 Actor 内部状态只能通过其方法访问,且访问是串行的,确保线程安全。
Y
- Yield(让步)
在AsyncStream或其他异步上下文中,yield用于将值传递给消费者。
示例:continuation.yield(value)
其他相关术语
Deadlock(死锁)
多个任务互相等待对方完成,导致程序无法继续执行。Swift 的Actor和结构化并发减少了死锁的可能性,但仍需注意循环等待。Sendable(可发送)
一个协议,表示类型可以安全地在并发上下文中传递。值类型和某些引用类型可以符合Sendable。
示例:struct MyData: Sendable { ... }Thread Safety(线程安全)
确保代码在多线程环境下正确运行。Swift 的并发模型通过Actors和隔离机制提供了内置的线程安全支持。
总结
以上术语表涵盖了 Swift 异步编程中的核心概念,帮助你快速理解和使用 async/await、结构化并发和 Actors 等特性。建议结合实际代码练习加深理解。如果需要某个术语的详细解释或代码示例,可以进一步交流!
