ロックフリーキュー、work-stealing deque、channel、epochベースのGC、atomic、scoped threadを備えたRustの並行処理ツール群。
rayon-rs/rayon
逐次イテレーターを、ほぼそのまま使えるAPIで並列化できるRust向けデータ並列処理ライブラリ。
- スター
- 13,399
- フォーク
- 618
- 未解決の Issue
- 233
- 最終コミット
- 2 か月前
これは何?
Rayonは、Rust向けのデータ並列処理ライブラリです。主なインターフェースである並列イテレーターを使うと、iter()をpar_iter()に変えるといった小さな変更だけで、逐次処理を並列処理にできます。タスクへの仕事の分割方法はRayonが決定し、パフォーマンスが最大化されるように調整します。
より細かく制御したい場合は、並列タスクを手動で作成するjoin関数やscope関数に加え、デフォルトのグローバルスレッドプールの代わりに使えるカスタムスレッドプールも利用できます。APIはデータ競合が起きないことを保証するよう設計されているため、コンパイルできるコードは基本的に逐次実行時と同じように動作します。並列イテレーターは逐次版と同じ結果を返しますが、チャネルへの送信やディスクへの書き込みなどの副作用は、異なる順序で発生する場合があります。
Rayonはcrates.ioで公開されており、rustc 1.85以降が必要です。WebAssemblyではデフォルトで逐次イテレーションにフォールバックし、マルチスレッドを利用するにはwasm-bindgen-rayonなどのアダプターが必要です。
主な機能
- 01iter()をpar_iter()に変える程度の変更で、逐次イテレーターを並列イテレーターに変換できます。
- 02並列タスクを手動で作成するjoin関数とscope関数を提供します。
- 03デフォルトのグローバルスレッドプールに加え、カスタムスレッドプールを利用できます。
- 04APIレベルでデータ競合が起きないよう設計されています。
- 05一部の逐次イテレーターメソッドに対応する並列版を提供します。
ユースケース
- Rustアプリケーションで、大規模なコレクションを処理するCPUバウンドなループを高速化する。
- スライスやベクターに対するmap、filter、sumなどのデータ変換を並列化する。
- join、scope、または専用スレッドプールを使って、独自のタスク並列処理を構築する。
- wasm-bindgen-rayonを使い、ブラウザーでRustコードをマルチスレッド実行する。
クイックスタート
- 1
Cargo.toml の依存関係に Rayon を追加します
[dependencies] rayon = "1.12" - 2
各モジュールで並列イテレーターのトレイトをスコープに取り込みます
use rayon::prelude::*; - 3
イテレーターを並列実行するには、foo.iter() を foo.par_iter() に変更します
使う前に知っておきたいこと
- rustc 1.85.0 以降が必要です。
- WebAssembly では、別途 wasm-bindgen-rayon アダプターと設定を追加しない限り、逐次イテレーションにフォールバックします。
トピック
よくある質問
- rayon とは?
- 逐次イテレーターを、ほぼそのまま使えるAPIで並列化できる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
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
Node.jsのメインイベントループをブロックせずにCPU負荷の高いタスクを実行できる、キュー、キャンセル、実行時間統計に対応したWorkerスレッドプール。
タスクグラフを使った並列処理向けのヘッダーオンリーC++ライブラリ。CPUのマルチスレッドとCUDA GPUに対応。
大規模AIモデル向けのPyTorchベースの分散学習・推論システムで、並列化、メモリ最適化、異種ハードウェアでの学習を実現します。
標準ライブラリを拡張する230以上のユーティリティを備えた、依存関係のない純粋なPythonライブラリ。
Diffusersを基盤に、キャッシュ、並列化、量子化、CPUオフロードを追加するDiffusion Transformer(DiT)向けPyTorch推論エンジン。