Как-то мимо меня прошло, а штука выглядит таки очень прикольной:
Dmitry Kashitsyn 0x7CFE:
Если кто не в курсе, в Rayon впилили адаптер, который позволяет использовать любой итератор в параллельном контексте:
ParallelBridge in rayon::iter - Rust
Подвох в том, что порядок следования элементов в таком случае не гарантирован.
Но зато теперь появилась возможность обрабатывать любые итераторы включая IO, например:
file.lines().par_bridge().for_each(|line| …)
/ стырено из гиттера /
Пример из доков:
use rayon::iter::ParallelBridge;
use rayon::prelude::ParallelIterator;
use std::sync::mpsc::channel;
let rx = {
let (tx, rx) = channel();
tx.send("one!");
tx.send("two!");
tx.send("three!");
rx
};
let mut output: Vec<&'static str> = rx.into_iter().par_bridge().collect();
output.sort_unstable();
assert_eq!(&*output, &["one!", "three!", "two!"]);