异步编程中 Actor 的挂起、重入与非隔离方法解析
1. 挂起与重入
在异步编程里,Actor 作为共享资源,能确保在任意时刻仅有一个任务对其状态进行访问或修改。不过,这也可能使得 Actor 成为潜在的瓶颈,就像某些应用程序出现冻结和无响应的状况。
1.1 阻塞 Actor
为了模拟不良行为,我们对 ProgressMonitor 中的 registerImageDownload() 方法进行重构,使其能接受要获取图像数据的应用程序名称。同时,在该方法里打印应用程序名称,接着使用不安全的 Thread.sleep() 让当前线程进入休眠状态。
import Foundation
actor ProgressMonitor { //...
}
extension ProgressMonitor {
func reset(total: Int) {
self.total = total
downloaded = 0
}
func registerImageDownload(for appName: String) {
downloaded += 1
print(("\n", appName, "..."))
Thread.sleep(forTimeInterval: 1) // bad - don't do this
print("downloaded", downloaded, "/", total)
}
}
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



