5 releases
0.1.4 | Apr 10, 2024 |
---|---|
0.1.3 | Mar 20, 2024 |
0.1.2 | Mar 25, 2023 |
0.1.1 | Dec 21, 2022 |
0.1.0 | Dec 18, 2022 |
#356 in Concurrency
Used in brck
18KB
333 lines
Parseq
Parseq is a Rust library crate that implements an extension trait adding parallel sequential mapping to the standard iterator trait.
See the crate documentation for more information.
Parseq's original source code is hosted here.
License
This work is distributed under the terms of both, the MIT License and the Apache License, Version 2.0.
Contribution
Contributions are welcome! Please contact me via email.
lib.rs
:
Parallel sequential iterator.
This crate implements an extension trait ParallelIterator
adding parallel sequential
mapping to the standard Iterator
trait.
Example
use std::time::Duration;
use parseq::ParallelIterator;
let mut iter = [3,2,1]
.into_iter()
.map_parallel(|i| {
// Insert heavy computation here ...
std::thread::sleep(Duration::from_millis(100*i));
2*i
});
assert_eq!(iter.next(), Some(6));
assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), Some(2));
assert_eq!(iter.next(), None);
See the examples
directory for a real world example.
Features
- Parseq utilizes a configurable number of worker threads
- Parseq preserves the order of the original iterator
- Parseq is lazy in the sense that it doesn't consume from the original iterator before
next
is called for the first time - Parseq doesn't
fuse
the original iterator - Parseq uses constant space: linear in the number of threads and the size of the buffer, not in the length of the possibly infinite original iterator
- Parseq propagates panics from the given closure
Alternatives
If you don't care about the order of the returned iterator you'll probably want to use Rayon instead. If you do care about the order, take a look at Pariter. The latter provides more functionality than this crate and predates it.
Dependencies
~345KB