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

在这里插入图片描述

概览

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

在这里插入图片描述

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

在本篇博文中,您将学到如下内容:

  • 概览
  • 1. MainActor:“我是主角!”
  • 2. 何为全局 Actor?
  • 3. “开始你的表演!”
  • 总结

掌握 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 ingroup.addTask {@MainActor intry? 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 形成的则是一片壮丽浩瀚的隔绝大陆!

上面我们讨论过&#x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过ETL工具快速实现单据同步

ETLCloud介绍 ETLCloud是一款旨在解决企业数据集成挑战的最新一代平台,它集成了离线数据集成ETL、ELT、CDC实时数据集成、编排调度和数据服务API等功能,形成了一体化的DataOps数据集成平台。该平台提供私有化部署以及云原生架构,能够满足企业…

设计模式深度解析:适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼 探索设计模式的魅力:深入了…

ElasticSearch - 基本操作

前言 本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

Linux--Ubuntu安装

Linux操作系统时程序员必须要学的操作系统。接下来我们就来看一下Linux操作系统是如何安装的 我们在 Vmware 虚拟机中安装 linux 系统,所以需要先安装 vmware 软件,然后再 安装 Linux 系统。 一.所需安装文件: Vmware 下载地址(现在最新版的…

羊大师揭秘,孩子适不适合喝羊奶?

羊大师揭秘,孩子适不适合喝羊奶? 羊奶,这个古老而珍贵的营养饮品,近年来在家长们中间逐渐走红。它以其独特的营养价值和口感受到了众多家庭的青睐。但是,面对市面上琳琅满目的羊奶产品,家长们常常陷入选择…

三连杆滑块机构运动学仿真 | 【Matlab源码+理论公式文本】|曲柄滑块 | 曲柄连杆 | 机械连杆

【程序简介】💻🔍 本程序通过matlab实现了三连杆滑块机构的运动学仿真编程,动态展现了三连杆机构的运动动画,同时给出了角位移、角速度和角加速度的时程曲线,除了程序本身,还提供了机构运动学公式推导文档…

网络——入门基础

目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么…

【链表】Leetcode 24. 两两交换链表中的节点【中等】

两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1: 输入:head [1,2,3,4] 输出&#…

用连续自然数之和来表达整数 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 该整数的所有表达式…

java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics

今天在使用springBoot连接influxdb报错 java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 详细报错如下&#xff0c;提出我们缺少一个依赖 原因是由于创建influxdb客户端缺少Kotlin运行时库 解决办法就是 1.显示的添加okhttp的依赖 <dependency>…

my2sql —— go语言版binlog解析及闪回工具

之前学习过python语言版binlog解析及闪回工具 MySQL闪回工具简介 及 binlog2sql工具用法 最近听同事介绍有了新的go语言版的my2sql。优点是不需要安装一大堆依赖包&#xff0c;直接可以安装使用&#xff0c;并且解析更高效&#xff0c;试用一下。 一、 下载安装 1. 软件下载 …

5分钟教你使用idea调试SeaTunnel自定义插件

在用Apache SeaTunnel研发SM2加密组件过程中&#xff0c;发现社区关于本地调试SeaTunnel文章过于简单&#xff0c;很多情况没有说明&#xff0c;于是根据自己遇到问题总结这篇文档。SeaTunnel本地调试官方文档&#xff0c;希望对大家有所帮助&#xff01; 使用的引擎为Flink(不…

极路由4获取不到local_token和uuid的解决方案

今天淘了个二手极路由4(HC5962)&#xff0c;想刷个Openwrt系统来着&#xff0c;就按着网上的教程来进行。 打开极路由ROOT local-ssh利用工具 (hiwifi.wtf)这个网站&#xff0c;然后第一步获取local_token就出问题了&#xff0c;显示的字是"找不到文件..."&#xff…

C/C++炸弹人游戏

参考书籍《啊哈&#xff0c;算法》&#xff0c;很有意思的一本算法书&#xff0c;小白也可以看懂&#xff0c;详细见书&#xff0c;这里只提供代码和运行结果。 这里用到的是枚举思想&#xff0c;还有更好地搜索做法。 如果大家有看不懂的地方或提出建议&#xff0c;欢迎评论区…

前端基础篇-深入了解 Ajax 、Axios

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Ajax 概述 2.0 Axios 概述 3.0 综合案例 1.0 Ajax 概述 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互是指&#xff0c;可以在不…

大模型第一讲笔记

目录 1、人工智能基础概念全景介绍... 2 1.1 人工智能全景图... 2 1.2 人工智能历史... 2 1.3 人工智能——机器学习... 3 监督学习、非监督学习、强化学习、机器学习之间的关系... 3 监督学习... 4 无监督学习... 5 强化学习... 5 深度学习... 6 2、语言模型的发展及…

演讲恐惧症?别怕!这3招帮你克服舞台紧张

演讲恐惧症&#xff1f;别怕&#xff01;这3招帮你克服舞台紧张 在人生的舞台上&#xff0c;演讲往往被视为展现个人才华、传递思想观点的重要平台。然而&#xff0c;对于许多人来说&#xff0c;站在舞台上却成为了一种难以克服的恐惧。演讲恐惧症&#xff0c;这个看似微不足道…

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲&#xff1a;首先&#xff0c;你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲&#xff0c;包括项目管理的五个过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;和十个知识领域&#xff1b; 2.制定学习计划&#xff1a;根据个人的时间…

发布镜像到阿里云仓库

发布上一篇Dockerfile实战-自定义的centos镜像。 1、登录阿里云 2、找到容器镜像服务 3、创建命令空间 4、创建镜像仓库 5、点击进入这个镜像仓库&#xff0c;可以看到所有的信息 6、根据操作指南测试推送发布 6.1登录阿里云 [rootzhoujunru home]# docker login --usernam…

【MySQL】锁信息

title: MySQL 锁信息 tags: MySQL abbrlink: 364637211 date: 2021-07-26 18:34:34 1 MySQL 锁定义 MySQL 锁&#xff08;Lock&#xff09;是数据库管理系统用于管理并发访问的一种机制。 在多用户同时访问数据库的环境下&#xff0c;可能会出现多个事务同时对相同的数据进行…