#hash-set #parallel-iterator #hash-map #iterator #parallel #hash #set

废弃 rayon-hash

(废弃) 支持 Rayon 并行迭代器的 HashMap 和 HashSet

6 个版本 (破坏性更新)

0.5.0 2019 年 4 月 25 日
0.4.1 2018 年 11 月 15 日
0.4.0 2018 年 8 月 31 日
0.3.0 2018 年 5 月 17 日
0.1.0 2017 年 11 月 14 日

#18 in #parallel-iterator

Download history 42/week @ 2024-04-01 7/week @ 2024-04-08 15/week @ 2024-04-15 13/week @ 2024-04-22 16/week @ 2024-04-29 6/week @ 2024-05-06 22/week @ 2024-05-13 20/week @ 2024-05-20 23/week @ 2024-05-27 14/week @ 2024-06-03 8/week @ 2024-06-10 12/week @ 2024-06-17 16/week @ 2024-06-24 83/week @ 2024-07-08 10/week @ 2024-07-15

110 每月下载量
用于 mockery

Apache-2.0/MIT

275KB
5K SLoC

Rayon Hash

rayon-hash crate rayon-hash documentation Travis Status deprecated

该软件包现在已被 废弃,因为 新实现 已作为 hashbrown 软件包存在,并具有自己的 "rayon" 功能。

rayon-hash 软件包重复了之前的标准 HashMapHashSet,并添加了对 Rayon 并行迭代器的原生支持。

Rayon 已经为这些标准类型提供了迭代器,但由于它无法访问内部字段,它必须收集到一个中间向量中,以便分割成并行作业。在 rayon-hash 中的自定义类型中,我们可以直接读取原始哈希表,从而获得更好的性能。

在将 hashbrown 实现合并到 std 之前,使用 rustc 1.36.0-nightly (2019-04-23) 编译器进行的基准测试

test hashbrown_set_sum_parallel  ... bench:     617,405 ns/iter (+/- 58,565)
test hashbrown_set_sum_serial    ... bench:   2,655,882 ns/iter (+/- 15,104)
test rayon_hash_set_sum_parallel ... bench:   1,368,058 ns/iter (+/- 75,984)
test rayon_hash_set_sum_serial   ... bench:   7,558,175 ns/iter (+/- 190,545)
test std_hash_set_sum_parallel   ... bench:   6,869,490 ns/iter (+/- 47,897)
test std_hash_set_sum_serial     ... bench:   7,591,704 ns/iter (+/- 154,438)

该软件包目前需要 rustc 1.31.0 或更高版本。

已知限制

为了在稳定 Rust 上运行,可能需要在某些方面做出妥协,与可能使用不稳定功能的标准类型相比。包含了一个示例,演示了一个差异。

  • examples/may_dangle.rs:由于我们没有使用不稳定的#[may_dangle]属性,因此HashMap<K, V>HashSet<T>的类型参数必须严格超出容器的生命周期。

不稳定特性

std复制的一些特性将被#[unstable]属性所保护,但这对于普通crate不可用。相反,我们使用配置标志rayon_hash_unstable来保护这些特性。使用它的最简单方法是将环境变量RUSTFLAGS设置。

RUSTFLAGS='--cfg rayon_hash_unstable' cargo build

请注意,这不仅需要对您的crate进行设置,还需要对依赖于您的crate的任何crate进行设置。这种传染性是有意为之的,因为这提醒您已经超出了正常的semver保证。这些特性可能还需要 nightly Rust 编译器。

当这些特性在标准库中得到稳定时,我们也将移除这里的rayon_hash_unstable保护。

许可协议

Rayon-hash在MIT许可协议和Apache许可协议(版本2.0)的条款下分发。有关详细信息,请参阅LICENSE-APACHELICENSE-MIT。提交拉取请求即表示同意这些许可条款。

依赖关系

~1.5MB
~25K SLoC