原子引用计数和自动引用计数有什么区别?
What's the difference between atomic reference counting and automatic reference counting?
我看到 ARC 是一个不时使用的首字母缩略词,但例如在 Rust 中它是 "atomic reference counting",而在 Swift 或 ObjC 中他们称之为 "automatic reference counting"。到底有什么区别?据我所知,它们的行为方式似乎相同。
这实际上...完全不同。
- atomic:来自atomicity,它描述了一个一步执行的操作,即外部观察者看不到任何中间步骤:他们只能看到之前或之后的状态。
- 自动:表示done or produced as if by a machine.
在 Rust 方面,我们有 Arc
和 Rc
是引用计数指针:
Rc
是最基本的引用计数指针:克隆它只会增加一个计数器,当指向特定数据的最后一个 Rc
被删除时,计数器就会下降到 0,那条数据也被丢弃了。
Arc
是它的原子版本,这意味着它是线程安全的,可以跨线程共享(不像Rc
)。
在Swift这边,ARC
指的是Automatic Reference Counting,Swift的Garbage Collection机制顾名思义是自动的(在代码中是不可见的)。
我看到 ARC 是一个不时使用的首字母缩略词,但例如在 Rust 中它是 "atomic reference counting",而在 Swift 或 ObjC 中他们称之为 "automatic reference counting"。到底有什么区别?据我所知,它们的行为方式似乎相同。
这实际上...完全不同。
- atomic:来自atomicity,它描述了一个一步执行的操作,即外部观察者看不到任何中间步骤:他们只能看到之前或之后的状态。
- 自动:表示done or produced as if by a machine.
在 Rust 方面,我们有 Arc
和 Rc
是引用计数指针:
Rc
是最基本的引用计数指针:克隆它只会增加一个计数器,当指向特定数据的最后一个Rc
被删除时,计数器就会下降到 0,那条数据也被丢弃了。Arc
是它的原子版本,这意味着它是线程安全的,可以跨线程共享(不像Rc
)。
在Swift这边,ARC
指的是Automatic Reference Counting,Swift的Garbage Collection机制顾名思义是自动的(在代码中是不可见的)。