Parallel Iterator
collection의 이터레이터를 task 단위로 나누어 병렬로 처리하는 방법이다.
rayon crate - https://crates.io/crates/rayon
use std::{ops::Range, time::Instant}; use rayon::prelude::*; fn sum_of_squares_par(input: Range<i32>) -> Vec<i32> { input.into_par_iter().map(|i| i - 1).collect::<Vec<_>>() } fn sum_of_squares(input: Range<i32>) -> Vec<i32> { input.into_iter().map(|i| i - 1).collect::<Vec<_>>() } fn main() { let input = 1..1_000_000_000; let start = Instant::now(); sum_of_squares(input); println!("plain iterator: {:?}", Instant::now() - start); let input = 1..1_000_000_000; let start = Instant::now(); sum_of_squares_par(input); println!("parallel iterator: {:?}", Instant::now() - start); } Compiling state_machine_pattern v0.1.0 (/home/wonchul/me/rust/state_machine_pattern) Finished dev [unoptimized + debuginfo] target(s) in 0.39s Running `target/debug/state_machine_pattern` plain iterator: 29.321507442s parallel iterator: 3.022041206s
댓글