我已经阅读过用于优化的Copy-on-Write概念Arrays
和Swift
.
我想知道的是Copy-on-Write如何在多线程环境中工作。
let arr1 = [1, 2, 3, 4]
let arr2 = arr1
arr1.withUnsafeBytes { print("arr1:", $0.baseAddress) } //0x000060000007ee60
arr2.withUnsafeBytes { print("arr2:", $0.baseAddress) } //0x000060000007ee60
DispatchQueue.global(qos: .default).async {
let arr3 = arr1
arr3.withUnsafeBytes { print("arr3:", $0.baseAddress) } //0x000060000007ee60
}
在上面的代码中,arr1
最初arr2
的地址与copy-on-write
. 但是,它arr3
也共享相同的内存arr1
,arr2
尽管它是在不同的线程上执行的。
据我所知,每个线程都有不同的堆栈分配。那为什么arr3
还共享同一个位置呢?
有人可以解释一下它是如何工作的。