Swift Concurrency 你学会了吗?

4,384 阅读3分钟

引言

Swift5.5 引入了全新的并发编程模型,为开发者提供了更强大,更易用的工具来处理并发任务。但是你真的学会如何使用Swift Concurrency了吗?在这篇文章中,我们将深入探讨Swift Concurrency 的基本概念和实际应用,帮助你更好的掌握这项技术。

并发编程的背景

  • 什么是并发

并发,简单来说是指同一时间端呢处理多个任务的能力。与串行相比,并发能够提高系统的效率和响应能力。

  • 并发编程的挑战

多线程编程的挑战包括线程同步,线程安全以及避免竞态条件。

Swift经典并发模型

  • Thread

在Swift中,Thread是一个底层的并发工具,可以精确控制线程。

截屏2024-07-03 22.32.19.png

  • GCD

GCD 是苹果公司为并行编程开发的高级工具,旨在简化并发编程。GCD提供了高效,易用的接口,帮助开发者更好的利用多核处理器的能力。

截屏2024-07-03 22.46.30.png

  • Operation Queue

Operation Queue 是苹果公司提供的一种更高级的并发编程工具,基于 'Operation' 和 'Operation Queue'类。它比GCD提供了更多的功能和灵活性,特别是在任务依赖和任务取消方面

截屏2024-07-03 22.44.18.png

Swift Concurrency的基本概念

  • await/async

'async' 关键字:用于定义一个异步函数。当调用一个标记为'async'的函数时,它不会立即立即执行,而是返回一个异步任务。这个任务有系统调度。 'await' 表明当前有一个中断点,等待异步任务执行完成,它不会暂停线程,此时线程会被让出来执行其他任务.

Screenshot 2024-07-04 at 13.05.59.png

  • actor

Swift中的Actor是一种并发模型,引入于Swift5.5,用于简化并发编程,尤其是在处理共享状态时,它提供了一种安全的方式来处理并发任务,防止数据竞争。

基本概念

  • actor: 引用类型,具有内置的线程安全机制,隐式符合Sendable协议。

  • actor-isolated: 一个actor 实例上的所有申明(属性,实例方法)默认都是actor-isolated,actor-isolated的申明可以自由引用同一actor实例上其他actor-isolated申明。非actor-isolated申明不能同步访问任何actor-isolated申明。

  • cross-actor引用: 从actor外部访问actor-isolated申明,被称为cross-actor引用。这样的引用有两种方法被允许。一是引用不可变状态。二是使用异步方法访问。

  • Sendable

Sendable 协议是Swift中为了支并发编程而引入的一个协议,它用来确保多线程环境中,类型的实例能够安全地在线程之间传递。具体来说,实现Sendable协议的类型需要保证实例在多个线程访问时不会引发数据竞争或其他并发问题。

  • Int,String,Array 默认遵循Sendable协议
  • 对于值类型(enum, struct),所有成员都是Senable,那么该类型遵循Sendable协议
  • 对于引用类型(class),可以使用同步机制保证线程安全,使用@unchecked Senable来忽略编译器检查
  • actor 默认遵循Sendable协议

截屏2024-07-05 22.01.13.png

结合实际

截屏2024-07-05 22.11.39.png

结论

使用Swift Concurrency可以简化多线程编程模型,让我们可以写出更安全,更简洁的多线程代码。 关于Swift,你还想看什么?评论区告诉我。