代码之家  ›  专栏  ›  技术社区  ›  Cron3x

将结构字段锈蚀为弧形与将结构锈蚀为弧形

  •  0
  • Cron3x  · 技术社区  · 2 年前

    我有一个关于《铁锈之弧》的问题。我想用多线程做点什么,偶然发现了tokio和Arcs,让多个线程访问相同的数据。目前,我使用了一个字段为Arcs的结构,该结构只是 典型的 .我使用结构作为某种配置,并为需要它的函数提供所需字段的克隆。我的问题是,将结构变量设置为圆弧和字段会更好吗 典型的 而不是将其交给函数并检索所需的字段? 我对内存使用和速度差异很感兴趣;有没有,或者只是使用其中一个方便吗?

    谢谢你的回答。

    我想到的代码:

    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;
    ...
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   Chayim Friedman    2 年前

    如果所有字段 Arc ,通常最好将整个结构放在 而不是很多 s表示每个字段。

    这样,克隆和删除更便宜(只需要一个引用计数而不是多个),四处移动结构更便宜(只有一个指针而不是很多),结构创建更快(一个分配而不是很多个),使用的内存更少(因为每个 引用计数需要两个额外的字),缓存位置性更好(因为数据是连续分配的,而不是分散在多个中),而且指针追逐也更少。

    如果你想隐瞒 从接口中使用,可以有两个structs, Config ConfigInner ,然后让 Config 只是一个包装 Arc<ConfigInner>

    推荐文章