0

我有一个 HashMap,我想尽可能快地添加元素。我尝试使用par_extend,但它实际上最终比串行版本慢。我的猜测是它正在并行评估迭代器,但串行扩展集合。这是我的代码:

use std::collections::HashMap;
use rayon::prelude::*;
use time::Instant;

fn main() {
    let n = 1e7 as i64;

    // serial version
    let mut t = Instant::now();
    let mut m = HashMap::new();
    m.extend((1..n).map(|i| (i, i)));
    println!("Time in serial version: {}", t.elapsed().as_seconds_f64());

    // parallel version - slower
    t = Instant::now();
    let mut m2 = HashMap::new();
    m2.par_extend((1..n).into_par_iter().map(|i| (i, i)));
    println!("Time in parallel version: {}", t.elapsed().as_seconds_f64());
}

是否有一种更快的方法来扩展实际上并行添加元素的 HashMap?或者类似的可以并行扩展的数据结构?我知道使用类似的东西会运行得更快FnvHashMap,但似乎也应该可以通过并行性来加快速度。(是的,我正在编译--release

4

0 回答 0