Rust 结构体字段作为弧与结构体作为弧

问题描述 投票:0回答:1

我有一个关于 Rust 中的 Arc 的问题。我想做一些多线程的事情,并偶然发现 tokio 和 Arcs 来让多个线程访问相同的数据。目前,我使用的结构体的字段为 Arcs,并且该结构体只是normal。我使用该结构作为某种配置,并将需要它的函数克隆到所需的字段。我的问题是,将结构变量设置为弧形并将字段设置为“正常”,而不是将其交给函数并检索所需的字段,这是更好的做法吗? 我对内存使用和速度差异非常感兴趣;有没有,或者只是为了方便使用其中之一? 感谢您的回答。

我想到的代码:

struct Config{ name: String, id: u32, ... } let myconf = Arc::new(Config::default()); do_stuff(myconf.clone()).await; ...

当前代码:

struct Config{ name: Arc<String>, id: Arc<u32>, ... } let myconf = Config::default(); do_stuff(myconf.name.clone(), myconf.id.clone()).await; ...


multithreading performance rust automatic-ref-counting rust-tokio
1个回答
0
投票
Arc

,通常最好将整个结构放在

Arc
后面,而不是每个字段只包含许多
Arc
这样,克隆和删除更便宜(只需一个引用计数碰撞而不是许多),移动结构更便宜(只需一个指针而不是许多),使用更少的内存(因为每个

Arc

需要两个额外的单词引用计数),缓存局部性更好(因为数据是连续分配的,而不是分散在许多地方),并且指针追逐也更少。

    

© www.soinside.com 2019 - 2024. All rights reserved.