rust clone() 与 Rc 或 Arc?

rust clone() vs Rc or Arc?

我正在尝试了解以下两者之间的优缺点:

除了测量和比较性能结果之外,我认为两者中的任何一个都不会在性能方面更差,我正在尝试了解 "generally better" 或 "more idiomatic" 中考虑的内容锈菌的思想。

如果我理解正确的话:

对比

在这种情况下("Something" 的创建成本很低),包裹在 Arc 中与仅克隆相比有什么好处吗? 这两个选项哪个更可取?

in this situation (where "Something" is cheap to create), is there any benefit of wrapping in an Arc vs just cloning it? is any of the two options preferable?

如果您确实只有一个 Arc<Something> 并且克隆了它,那么可能没有。如果你想在线程之间共享某些东西并且所有权不明确,那么 Arc 是必需的,通常你需要在引用计数中使用某种锁以允许修改共享项。

虽然在某些情况下它可以在没有锁的情况下使用,例如内部对象不能(因为它真的是唯一的)或不应该(因为它很昂贵)被复制并且需要被多个线程(不变地)使用(所以你使用 Arc 作为共享单个实例的方式),或者它有时会被复制(而且很昂贵),但通常不会,在这种情况下,您可以 make_mut 在需要 "split" Arc 时 make_mut 但将额外分配推迟到那个点。