pub struct Rayon { /* private fields */ }Expand description
A parallel execution strategy backed by a rayon thread pool.
This strategy adaptively executes collection operations serially or through its backing pool. It records wall-clock estimates by callsite, input-size and work-size buckets, and planning parallelism so small inputs can avoid rayon scheduling overhead without disabling parallel execution for larger inputs.
§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 fn with_pool(thread_pool: ThreadPool) -> Self
pub fn with_pool(thread_pool: ThreadPool) -> Self
Creates a new Rayon strategy with the given ThreadPool.
Sourcepub const fn with_parallelism(self, parallelism: NonZeroUsize) -> Self
pub const fn with_parallelism(self, parallelism: NonZeroUsize) -> Self
Overrides the parallelism assumed for planning decisions.
This does not resize the backing pool. By default a strategy plans with the pool’s thread count; override it when the strategy should expose a different parallelism (e.g. a runtime that executes strategy work inline on a single thread).
Trait Implementations§
Source§impl Strategy for Rayon
Available on (crate features std) and neither commonware_stability_DELTA nor commonware_stability_EPSILON nor commonware_stability_GAMMA nor commonware_stability_RESERVED only.
impl Strategy for Rayon
std) and neither commonware_stability_DELTA nor commonware_stability_EPSILON nor commonware_stability_GAMMA nor commonware_stability_RESERVED only.Source§fn spawn<F, T>(&self, f: F) -> impl Future<Output = T> + Send + 'static
fn spawn<F, T>(&self, f: F) -> impl Future<Output = T> + Send + 'static
Source§fn run<R, SEQ, PAR>(&self, len: usize, serial: SEQ, parallel: PAR) -> R
fn run<R, SEQ, PAR>(&self, len: usize, serial: SEQ, parallel: PAR) -> R
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
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>
Vec. Read moreSource§fn try_map_collect_vec<I, F, T, E>(
&self,
iter: I,
map_op: F,
) -> Result<Vec<T>, E>
fn try_map_collect_vec<I, F, T, E>( &self, iter: I, map_op: F, ) -> Result<Vec<T>, E>
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>
Vec. Read moreSource§fn map_init_collect_vec_with_multiplier<I, INIT, T, F, R>(
&self,
iter: I,
multiplier: usize,
init: INIT,
map_op: F,
) -> Vec<R>
fn map_init_collect_vec_with_multiplier<I, INIT, T, F, R>( &self, iter: I, multiplier: usize, init: INIT, map_op: F, ) -> Vec<R>
Source§fn try_fold<I, R, E, ID, F, RD>(
&self,
iter: I,
identity: ID,
fold_op: F,
reduce_op: RD,
) -> Result<R, E>
fn try_fold<I, R, E, ID, F, RD>( &self, iter: I, identity: ID, fold_op: F, reduce_op: RD, ) -> Result<R, E>
Source§fn join<A, B, RA, RB>(&self, a: A, b: B) -> (RA, RB)
fn join<A, B, RA, RB>(&self, a: A, b: B) -> (RA, RB)
Source§fn sort_by<T, C>(&self, items: &mut [T], compare: C)
fn sort_by<T, C>(&self, items: &mut [T], compare: C)
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
Auto Trait Implementations§
impl !RefUnwindSafe for Rayon
impl !UnwindSafe for Rayon
impl Freeze for Rayon
impl Send for Rayon
impl Sync for Rayon
impl Unpin for Rayon
impl UnsafeUnpin 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
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>
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>
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