Swift 结构化并发之全局 Actor 趣谈

在这里插入图片描述

概览

在 Swift 结构化并发构成的体系中,一个称为“演员”(Actor)的成员扮演了非常重要的角色,它被用来隔离和同步执行中的数据。

在这里插入图片描述

除了普通 Actor 以外,还有一个全局“演员”(Global Actor)的概念,它是做什么的?又有什么与众不同的长处呢?

掌握 Swift 结构化并发是迈向现代化并行开发模型的必由之路,而 Actor 以及 Global Actor 又是其中不可或缺的重要元素!

那还等什么呢?小伙伴们,Let‘s playing!!!😉


1. MainActor:“我是主角!”

我相信即使是 Apple 开发中头发浓密的初学者们也肯定都知道:所有和界面相关的操作一定要在主线程(Main Thread)中完成。

对于 Swift 结构化并发中的 Actor 来说,这一点也不能例外。

所以,一个所谓的“绝对主角”(Main Actor)踏着七彩祥云“从天而降”来帮助我们排忧解难。在 UIKit 中,所有和界面相关的类,以及它们对应的方法和属性,默认都包容在 MainActor 之中:

在这里插入图片描述
在这里插入图片描述

在 SwiftUI 中,视图的 body 属性也很“识趣”的与 MainActor 成了好朋友:

在这里插入图片描述

在 Swift 结构化并发模型中, 使用 MainActor 可以确保我们的任务都毫无悬念的将会在主线程中运行。

在某些非 MainActor 的运行上下文中,我们也可以非常方便的将其切换到主线程上去:

Task {
   
    // 非 MainActor 运行上下文
    await MainActor.run {
   
        // MainActor 运行上下文
    }
}

或者,我们还可以用闭包的修饰语法糖来让编译器明白我们要在 MainActor 中运行的“坚定决心”:

Task {
   
    await withTaskGroup(of: Void.self) {
   group in
        group.addTask {
   @MainActor in
            try? await Task.sleep(for: .seconds(1.0))
            print(Thread.current)
            // 在主线程中了,加油妆点界面吧!
        }
        
        await group.waitForAll()
    }
}

如上所述,MainActor 就是一个在主线程上下文中运行的 Actor,更确切的说:它是运行在主线程中的一个全局(Global)Actor!

2. 何为全局 Actor?

所谓全局 Actor 是一种全局唯一的 Actor 类型,它用于隔离程序任何位置中的各种声明代码。

在这里插入图片描述

说到全局 Actor,我们很自然的就想到普通的 Actor。做个不太恰当的比喻:如果说普通的 Actor 创建出一个个数不胜数的隔绝小岛,那么全局 Actor 形成的则是一片壮丽浩瀚的隔绝大陆!

上面我们讨论过,MainActor 其

相关推荐

  1. Rust 中 Actor 并发模型的实践与使用

    2024-03-24 07:06:06       33 阅读
  2. Swift中的结构

    2024-03-24 07:06:06       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 07:06:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 07:06:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 07:06:06       82 阅读
  4. Python语言-面向对象

    2024-03-24 07:06:06       91 阅读

热门阅读

  1. TensorFlow 的基本概念和使用场景

    2024-03-24 07:06:06       37 阅读
  2. C语言中的static关键字

    2024-03-24 07:06:06       44 阅读
  3. 二进制源码部署mysql8.0.35

    2024-03-24 07:06:06       31 阅读
  4. node.js中常用的命令及示例

    2024-03-24 07:06:06       36 阅读
  5. Node.js 常用命令

    2024-03-24 07:06:06       41 阅读
  6. 算法提高篇基础算法第一章 - 贪心算法

    2024-03-24 07:06:06       34 阅读
  7. 计算机二级真题讲解每日一题:《format格式化》

    2024-03-24 07:06:06       33 阅读