请解释 Swift 中 Actor 的概念,并说明它主要解决了哪些并发编程中的问题?
考察说明
考查对 Swift 并发模型中 Actor 机制的理解及其解决的数据竞争问题。
回答思路
- 【回答框架 1】Actor 是 Swift 5.5 引入的并发特性,用于保护可变状态。它是一个引用类型,封装了属性和方法,并确保在同一时间只有一个任务能访问其可变状态,从而避免数据竞争。
- 【回答框架 2】Actor 通过编译器强制实施隔离:其内部的可变属性默认不能从外部直接访问,必须通过异步方法或属性访问,这些调用会自动挂起等待,直到 Actor 可处理。这避免了显式加锁的负担。
- 【回答框架 3】主要解决的问题是传统锁机制(如 NSLock)易出错、容易导致死锁或性能下降的问题。Actor 提供了更安全的抽象,能减少数据竞争和线程安全问题。
- 【回答框架 4】访问 Actor 属性时,如果外部调用其方法,需要标记为 async,否则无法访问。这有助于在编译期发现并发问题。
- 【回答框架 5】此外,Actor 还支持可重入性,即在等待异步调用期间,Actor 可以处理其他任务,提高了并发性能。
- 【关键点 1】Actor 通过隔离可变状态避免数据竞争。
- 【关键点 2】外部访问 Actor 内部状态需通过 async 调用。
- 【关键点 3】编译器强制隔离,减少显式锁的使用。
- 【关键点 4】Actor 可重入,提高并发效率。
- 【易错点 1】混淆 Actor 与普通 class,错误地直接访问其属性导致编译错误或数据竞争。
- 【易错点 2】认为 Actor 一定比锁性能更好,实际上存在上下文切换开销,需根据场景评估。