6 releases
0.2.0 | Feb 29, 2024 |
---|---|
0.1.0 | Feb 19, 2024 |
0.1.0-alpha4 | Feb 18, 2024 |
0.1.0-alpha3 | Feb 4, 2024 |
#819 in Concurrency
619 downloads per month
Used in 4 crates
(2 directly)
21KB
87 lines
rayon_iter_concurrent_limit
Limit the concurrency of an individual rayon parallel iterator method with a convenient macro.
The documentation outlines the motivation, implementation, and limitations of this crate.
Example
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use rayon_iter_concurrent_limit::iter_concurrent_limit;
const N: usize = 1000;
let output = iter_concurrent_limit!(2, (0..100), map, |i: usize| -> usize {
let alloc = vec![i; N]; // max of 2 concurrent allocations
alloc.into_par_iter().sum::<usize>() // runs on all threads
})
.map(|alloc_sum| -> usize {
alloc_sum / N // max of 2 concurrent executions
})
.collect::<Vec<usize>>();
assert_eq!(output, (0..100).into_iter().collect::<Vec<usize>>());
Licence
rayon_iter_concurrent_limit is licensed under either of
- the Apache License, Version 2.0 LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 or
- the MIT license LICENSE-MIT or http://opensource.org/licenses/MIT, at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~1.5MB
~25K SLoC