Swift异步编程:从基础到实践
1. 代码拆分为部分任务
为了优化CPU核心和内存等共享资源,Swift将代码拆分为称为部分任务(partial tasks)或部分(partials)的逻辑单元,这些单元代表了你希望异步运行的代码部分。Swift运行时会分别调度这些部分任务进行异步执行。当每个部分任务完成时,系统会决定是继续执行你的代码还是执行另一个任务。
需要注意的是,每个带有 await
注释的部分任务可能会根据系统的决定在不同的线程上运行。因此,在 await
之后,你不应该对应用程序的状态做出假设,尽管两行代码看起来是依次出现的,但它们通常会在一段时间后才执行。
async/await
是一种简单但功能强大的语法。它让编译器指导你编写安全可靠的代码,同时运行时会优化共享系统资源的协调使用。
1.1 执行部分任务
与传统的闭包语法不同,现代并发语法更加简洁。像 async
、 await
和 let
这样的关键字能清晰地表达你的意图。并发模型的基础是将异步代码拆分为部分任务,并在执行器(Executor)上执行。
目前,Swift的内置执行器仅以异步序列的方式运行任务。不过,已经有关于自定义执行器的提案和正在进行的实现,这将实现更灵活的任务调度。
1.2 控制任务的生命周期
现代并发的一个重要新特性是系统能够管理异步代码的生命周期。旧的多线程API存在一个很大的缺点,即一旦异步代码开始执行