Skip to content
>_devvkit
$devvkit learn --librarie rayon-guide

Rayon Guide

[rust][parallel][concurrency]
Rust
Install
cargo add rayon

Rayon converts sequential iterators to parallel with a single method call: par_iter().

Work-stealing scheduler dynamically balances work across threads without global locking.

Rayon guarantees thread-safety: the compiler ensures your closure is Send + Sync.

Setup

Add dependencyCargo.toml.
cargo add rayon

Parallel Iterators

Basic par_iterParallel map.
use rayon::prelude::*;

let numbers: Vec<i32> = (0..100_000).collect();
let doubled: Vec<i32> = numbers.par_iter().map(|n| n * 2).collect();
Parallel filter/mapChain parallel ops.
let evens: Vec<_> = (0..1000).into_par_iter()
    .filter(|n| n % 2 == 0)
    .map(|n| n * n)
    .collect();
Parallel sumReduce in parallel.
let sum: i32 = (0..1_000_000).into_par_iter().sum();
let max = (0..1_000_000).into_par_iter().max();
Parallel sortMulti-threaded sort.
let mut vec: Vec<i32> = /* ... */;
vec.par_sort();  // parallel quicksort
Find anyShort-circuit search.
let found = data.par_iter().find_any(|&&x| x == 42);

Custom Operations

Fork-joinManual parallelism.
use rayon::join;

let (left, right) = join(
    || process_half(&data[..mid]),
    || process_half(&data[mid..]),
);

Performance

Custom thread poolControl parallelism.
use rayon::ThreadPoolBuilder;

let pool = ThreadPoolBuilder::new()
    .num_threads(4)
    .build()
    .unwrap();

pool.install(|| {
    data.par_iter().for_each(|item| process(item));
});