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
110 每月下载量
用于 mockery
275KB
5K SLoC
Rayon Hash
该软件包现在已被 废弃,因为 新实现 已作为 hashbrown
软件包存在,并具有自己的 "rayon" 功能。
rayon-hash
软件包重复了之前的标准 HashMap
和 HashSet
,并添加了对 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-APACHE和LICENSE-MIT。提交拉取请求即表示同意这些许可条款。
依赖关系
~1.5MB
~25K SLoC