Repolode
rayon-rs

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. 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 とは?
逐次イテレーターを、ほぼそのまま使える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 の数値は毎日更新されます。

関連プロジェクト