Swift 面试:并发、async/await 与 Actor 源码解析

Swift 面试:并发、async/await 与 Actor 源码解析 Swift Concurrency 面试经常从 async/await 问起,但真正的重点是:Task 是结构化并发的执行单元,await 是显式暂停点,Actor 通过隔离和串行执行器保护状态,Sendable 则约束跨并发边界传递的数据。 这篇文章按面试题展开,把结论落到 Swift 标准库和编译器源码里的 Actor、GlobalActor、MainActor、AsyncLet、TaskGroup、Sendable 和 ActorIsolation。 面试高频问题 async/await 和 GCD 的关系是什么? await 到底表示线程阻塞还是任务暂停? Task、async let、TaskGroup 有什么区别? Actor 如何保证数据隔离? MainActor 是什么,为什么 UI 更新要回到 MainActor? GlobalActor 和普通 Actor 有什么区别? Sendable 解决什么问题? Task.detached 为什么要慎用? Actor 之间调用为什么需要 await? Swift Concurrency 是编译器机制还是运行时机制? 30 秒回答版 Swift Concurrency 是编译器、标准库和运行时共同完成的并发模型。 async/await 不是对 GCD 的简单语法糖。await 表示当前异步任务可能在这里暂停,把执行权交还给调度器;等异步结果可用时,再从 continuation 恢复。它不应该理解成“阻塞当前线程等待”。 Actor 是一种受隔离保护的引用类型。Actor 内部可变状态只能在 actor 隔离域内访问;跨 actor 访问必须异步,编译器会插入隔离检查。运行时通过 executor 保证同一 actor 的隔离状态不会被多个任务同时进入。 ...

June 16, 2026