引言
随着移动应用和服务的复杂性不断增加,处理并发操作变得越来越重要。在 Swift 5.5 中引入了一个全新的特性,即 Swift Actor(角色),它为我们提供了一种简单且安全的并发编程模型。本篇博客将深入探索 Swift 中的 Actor 模型,并介绍它在实际开发中的运用场景和优势。
Actor 基本原理
- Actor 是一种并发编程模型,它通过限制只有一个线程可以访问 Actor 内部的状态来保证线程安全。
- Actor 内部的状态只能由 Actor 自身的方法进行修改,其他线程无法直接访问和修改。
- Actor 之间通过异步消息传递进行通信,确保了线程安全性
actor关键字来构建Actor, 和class. struct 和enum的区别
- actor和class都是引用类型
- Actor 和 Class 区别在于 Actor 遵守了 Actor 协议,可以保证在并发环境下操作数据的安全性
- Actor 不支持继承
- 都有方法,属性,构造方法
- 可以遵循协议
- 所有的方法和属性都是static,因为没有self的概念
Actor 的定义和访问
- 在 Swift 中,我们可以使用 actor 关键字来定义一个 Actor 类。
- Actor 类中的方法默认是异步的,并且可以通过 nonisolated 关键字将某些方法标记为非隔离的,以便可以在 Actor 外部进行调用。
- 通过在方法前添加 async 关键字,我们可以在 Actor 内部进行异步操作。
- Actor 内部的状态可以通过声明为 private 或 fileprivate 来确保只有 Actor 内部可以访问。
- 通过使用 await 关键字,我们可以等待 Actor 方法的结果,并确保线程安全。
- Actor 的状态修改只能在 Actor 内部进行,这样可以避免竞态条件和数据访问冲突。
测试例子
// 创建对象
actor MyActor {
private var sharedArr = [1,2,3,4,5]
// 读取数据
func readData() async -> [Int] {
return sharedArr
}
// 添加数据
func writeData(value: Int) async {
sharedArr.append(value)
}
// 删除数据
func removeData() async {
sharedArr.removeLast()
}
}
// 创建 MyActor 实例
let myActor = MyActor()
异步读取共享数据
Task {
for data in await myActor.readData() {
print("read data: (data)")
}
}
// 异步写入共享数据
Task {
await myActor.writeData(value: 10)
print("write Data 10")
}
// 异步读取共享数据
Task {
for data in await myActor.readData() {
print("read data: (data)")
}
}
// 结果
// read data: 1
// read data: 2
// read data: 3
// read data: 4
// read data: 5
// write Data 10
// read data: 1
// read data: 2
// read data: 3
// read data: 4
// read data: 5
// read data: 10
// 异步读写数据,数据安全
// 异步删除共享数据
Task {
for data in await myActor.readData() {
print("read data: (data)")
}
}
// 异步删除共享数据
Task {
for _ in (0...2){
await myActor.removeData()
print("remove Data")
}
}
// 异步读取共享数据
Task {
for data in await myActor.readData() {
print("read data: (data)")
}
print(await myActor.readData())
}
// 结果
// read data: 1
// read data: 2
// read data: 3
// read data: 4
// read data: 5
// read data: 1
// read data: 2
// read data: 3
// remove Data
// read data: 4
// remove Data
// read data: 5
// remove Data
// [1, 2]
结论
通过引入 Swift Actor,Swift 语言提供了一种简单且安全的并发编程模型,使得开发者可以更轻松
原文地址:https://blog.csdn.net/u010130947/article/details/131188568
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_16475.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。