Rayon: адаптер для использования любого итератора в параллельном контексте


#1

Как-то мимо меня прошло, а штука выглядит таки очень прикольной:

Dmitry Kashitsyn 0x7CFE:

Если кто не в курсе, в Rayon впилили адаптер, который позволяет использовать любой итератор в параллельном контексте:

https://docs.rs/rayon/1.0.3/rayon/iter/trait.ParallelBridge.html

Подвох в том, что порядок следования элементов в таком случае не гарантирован.
Но зато теперь появилась возможность обрабатывать любые итераторы включая 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!"]);