pub struct Rayon { /* private fields */ }Expand description
A parallel execution strategy backed by a rayon thread pool.
This strategy executes fold operations in parallel across multiple threads.
It wraps a rayon ThreadPool and uses it to schedule work.
§Thread Pool Ownership
Rayon holds an Arc<ThreadPool>, so it can be cheaply cloned and shared
across threads. Multiple Rayon instances can share the same underlying
thread pool.
§When to Use
Use Rayon when:
- Processing large collections where parallelism overhead is justified
- The fold/reduce operations are CPU-bound
- You want to utilize multiple cores
Consider Sequential instead when:
- The collection is small
- Operations are I/O-bound rather than CPU-bound
- Deterministic execution order is required for debugging
§Examples
use commonware_parallel::{Strategy, Rayon};
use std::num::NonZeroUsize;
let strategy = Rayon::new(NonZeroUsize::new(2).unwrap()).unwrap();
let data: Vec<i64> = (0..1000).collect();
let sum = strategy.fold(&data, || 0i64, |acc, &n| acc + n, |a, b| a + b);
assert_eq!(sum, 499500);Implementations§
Source§impl Rayon
impl Rayon
Sourcepub fn new(num_threads: NonZeroUsize) -> Result<Self, ThreadPoolBuildError>
pub fn new(num_threads: NonZeroUsize) -> Result<Self, ThreadPoolBuildError>
Creates a Rayon strategy with a ThreadPool that is configured with the given
number of threads.
Sourcepub const fn with_pool(thread_pool: ThreadPool) -> Self
pub const fn with_pool(thread_pool: ThreadPool) -> Self
Creates a new Rayon strategy with the given ThreadPool.
Trait Implementations§
Source§impl Strategy for Rayon
impl Strategy for Rayon
Source§fn fold_init<I, INIT, T, R, ID, F, RD>(
&self,
iter: I,
init: INIT,
identity: ID,
fold_op: F,
reduce_op: RD,
) -> R
fn fold_init<I, INIT, T, R, ID, F, RD>( &self, iter: I, init: INIT, identity: ID, fold_op: F, reduce_op: RD, ) -> R
Reduces a collection to a single value with per-partition initialization. Read more
Source§fn fold<I, R, ID, F, RD>(
&self,
iter: I,
identity: ID,
fold_op: F,
reduce_op: RD,
) -> R
fn fold<I, R, ID, F, RD>( &self, iter: I, identity: ID, fold_op: F, reduce_op: RD, ) -> R
Reduces a collection to a single value using fold and reduce operations. Read more
Source§fn map_collect_vec<I, F, T>(&self, iter: I, map_op: F) -> Vec<T>
fn map_collect_vec<I, F, T>(&self, iter: I, map_op: F) -> Vec<T>
Maps each element and collects results into a
Vec. Read moreSource§fn map_init_collect_vec<I, INIT, T, F, R>(
&self,
iter: I,
init: INIT,
map_op: F,
) -> Vec<R>
fn map_init_collect_vec<I, INIT, T, F, R>( &self, iter: I, init: INIT, map_op: F, ) -> Vec<R>
Maps each element with per-partition state and collects results into a
Vec. Read moreAuto Trait Implementations§
impl Freeze for Rayon
impl !RefUnwindSafe for Rayon
impl Send for Rayon
impl Sync for Rayon
impl Unpin for Rayon
impl !UnwindSafe for Rayon
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more