Actor (Swift 5.5+) vs GCD (DispatchQueue) 对比

结构化并发,编译器保证无数据竞争

VS
GCD (DispatchQueue)

传统的 Grand Central Dispatch,支持 iOS 4+

9 分钟阅读iOS

评分对比

图表加载中…

详细评分

详细评分: Actor (Swift 5.5+) GCD (DispatchQueue) ——按类别打分,满分 10 分
分类Actor (Swift 5.5+)GCD (DispatchQueue)
性能
9/10
10/10
学习难易度
8/10
6/10
生态系统
9/10
8/10
社区
9/10
9/10
就业市场
10/10
7/10
面向未来
10/10
6/10

优缺点

Actor (Swift 5.5+)

优点

  • 编译期数据竞争安全
  • 原生支持 async/await
  • Swift 6 严格并发模式下强制生效
  • 显式的 @MainActor、@globalActor
  • Nonisolated 方法支持无线程限制的读取
  • Actor 跳转对开发者透明
  • 兼容 Swift Testing 框架
  • 调试更简单 —— 调用栈清晰可见

缺点

  • 仅支持 Swift 5.5+
  • Actor 隔离概念有一定学习曲线
  • Sendable 一致性规则较严格
  • Actor 跳转开销虽小但确实存在

最适合

新的 iOS 15+ 应用跨线程共享状态async/await 工作流对数据竞争敏感的代码(金融、安全领域)Swift 6 迁移项目

GCD (DispatchQueue)

优点

  • 广泛支持 iOS 4+
  • 经过 15 年以上生产环境验证
  • 全局队列与自定义队列灵活搭配
  • QoS 等级(userInteractive、utility、background)
  • DispatchSemaphore、DispatchGroup 原语
  • DispatchSourceTimer 提供细粒度控制
  • 支持底层性能调优
  • 与 Objective-C 互操作

缺点

  • 无法在编译期捕获数据竞争
  • 回调地狱 / 嵌套闭包可读性差
  • 没有显式的 @MainActor —— 需手动调用 DispatchQueue.main.async
  • 调试困难 —— 定位线程上下文需要借助 Instruments
  • 迁移到 Swift 6 较为困难

最适合

遗留 iOS 应用(iOS 10-14)性能关键的底层任务(视频帧、音频处理)与 Objective-C 代码库互操作自定义调度需求需要 DispatchSourceTimer、信号量等场景

代码对比

Actor (Swift 5.5+)
actor UserCache {
    private var cache: [String: User] = [:]

    func get(id: String) -> User? {
        return cache[id]
    }

    func set(id: String, user: User) {
        cache[id] = user
    }
}

// 使用方式
let cache = UserCache()
let user = await cache.get(id: "123")  // actor 跳转自动完成
GCD (DispatchQueue)
import Foundation

class UserCache {
    private let queue = DispatchQueue(label: "cache", attributes: .concurrent)
    private var cache: [String: User] = [:]

    func get(id: String, completion: @escaping (User?) -> Void) {
        queue.async {
            completion(self.cache[id])
        }
    }

    func set(id: String, user: User) {
        queue.async(flags: .barrier) {
            self.cache[id] = user
        }
    }
}

结论

新的 Swift 5.5+ 代码应强制使用 Actor。遗留的 iOS 10-14 代码继续使用 GCD。混合方案:新模块用 Actor,旧的 GCD 代码维护并逐步迁移。Swift 6 严格并发模式将在 2026 年成为强制要求。

获取免费咨询
常见问题

常见问题

Actor 跳转的开销为 10-50ns —— 微秒级别。对视频处理这类超低延迟场景仍建议用 GCD,其他场景选 Actor 更合适。

相关博客文章

查看全部文章

相关项目

查看全部项目
全部对比