Repolode
rayon-rs

rayon-rs/rayon

Rust 数据并行库,只需修改少量代码即可把顺序迭代器改为并行执行。

Star
13,399
Fork
618
未关闭 Issue
233
最近提交
2个月前

这是什么?

Rayon 是一个面向 Rust 的数据并行库。它的核心接口是并行迭代器,开发者只需把 iter() 改为 par_iter(),就能把顺序计算变成并行计算。Rayon 会自动决定如何把数据切分为任务,并根据运行情况调整划分方式以获得较好性能。

如需更精细的控制,Rayon 还提供 join 和 scope 函数用于手动创建并行任务,也支持创建自定义线程池来替代默认的全局线程池。其 API 设计保证无数据竞争,因此能通过编译的代码通常与顺序执行的结果一致。并行迭代器的结果与顺序版本相同,但带有副作用的操作(如通道发送或写入磁盘)可能以不同顺序发生。

Rayon 发布在 crates.io 上,要求 rustc 1.85 或更高版本。在 WebAssembly 环境下默认退化为顺序迭代,若需多线程支持,需要配合 wasm-bindgen-rayon 等适配器使用。

核心功能

  • 01将顺序迭代器改为并行迭代器,通常只需修改一处调用。
  • 02提供 join 和 scope 函数,用于手动创建并行任务。
  • 03除默认全局线程池外,支持创建自定义线程池。
  • 04API 设计保证无数据竞争。
  • 05部分迭代器方法提供性能更高的并行替代版本。

适用场景

  • 加速 Rust 程序中对大规模集合的 CPU 密集型循环。
  • 对切片或向量并行执行 map、filter、sum 等数据转换。
  • 借助 join、scope 或专用线程池构建自定义的任务并行负载。
  • 配合 wasm-bindgen-rayon 在浏览器中运行多线程 Rust 代码。

快速上手

  1. 1

    在 Cargo.toml 的依赖中添加 Rayon

    [dependencies] rayon = "1.12"
  2. 2

    在需要使用并行迭代器的每个模块中引入相关特征

    use rayon::prelude::*;
  3. 3

    将 foo.iter() 改为 foo.par_iter() 即可并行运行迭代器

使用前须知

  • 需要 rustc 1.85.0 或更高版本。
  • 在 WebAssembly 下默认退回顺序迭代,若要多线程需额外使用 wasm-bindgen-rayon 适配器并进行项目配置。

标签

常见问题

rayon 是什么?
Rust 数据并行库,只需修改少量代码即可把顺序迭代器改为并行执行。 Rayon 是一个面向 Rust 的数据并行库。它的核心接口是并行迭代器,开发者只需把 iter() 改为 par_iter(),就能把顺序计算变成并行计算。Rayon 会自动决定如何把数据切分为任务,并根据运行情况调整划分方式以获得较好性能。
rayon 可以免费使用吗?用的什么许可证?
rayon 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
rayon 还在维护吗?
半年内有更新。rayon 最近一次提交是在 2026年8月28日。
rayon 适合用来做什么?
加速 Rust 程序中对大规模集合的 CPU 密集型循环。 对切片或向量并行执行 map、filter、sum 等数据转换。 借助 join、scope 或专用线程池构建自定义的任务并行负载。 配合 wasm-bindgen-rayon 在浏览器中运行多线程 Rust 代码。
rayon 怎么安装和运行?
在 Cargo.toml 的依赖中添加 Rayon: [dependencies] rayon = "1.12" 在需要使用并行迭代器的每个模块中引入相关特征: use rayon::prelude::*; 将 foo.iter() 改为 foo.par_iter() 即可并行运行迭代器
在哪里获取 rayon?
源代码和安装说明在 GitHub 上:https://github.com/rayon-rs/rayon

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目