闽公网安备 35020302035485号
use std::i64;
fn main() {
let arr:Vec<i64> = (1..1_0000_0000).collect();
let result = sum_of_add(&arr);
println!("{}",result);
}
fn sum_of_add(input: &[i64]) -> i64 {
input.iter()
.map(|&i| i + i)
.sum()
}
添加部分代码,统计程序执行时间use std::{i64, time::SystemTime};
fn main() {
let arr: Vec<i64> = (1..1_0000_0000).collect();
let time_a = SystemTime::now();
let result = sum_of_add(&arr);
println!("{}", result);
let time_b = SystemTime::now().duration_since(time_a);
println!("{:?}", time_b);
}
fn sum_of_add(input: &[i64]) -> i64 {
input.iter().map(|&i| i + i).sum()
}
执行 cargo run --release, 输出:9999999900000000 Ok(67.672ms)考虑使用Rayon。这是一个并行计算库,利用work-steal思想,让负载不高的线程,去分担其他线程的工作。
use std::{i64, time::SystemTime};
use rayon::prelude::*;
fn main() {
let arr: Vec<i64> = (1..1_0000_0000).collect();
let time_a = SystemTime::now();
let result = sum_of_add(&arr);
println!("{}", result);
let time_b = SystemTime::now().duration_since(time_a);
println!("{:?}", time_b);
}
fn sum_of_add(input: &[i64]) -> i64 {
input.par_iter().map(|&i| i + i).sum()
}
再次 cargo run --release9999999900000000 Ok(29.368ms)提升了一倍有余。
Rust 的 Rayon 库提升程序性能的关键在于其并行数据处理能力。Rayon 是一个数据并行化库,它允许你轻松地将数据处理操作转换为并行执行的任务,以此来利用现代多核处理器的性能。
以下是 Rayon 如何帮助提升程序性能的几个主要方面:
简化并行化:Rayon 提供了高级的抽象,允许开发者以最少的代码改动实现并行处理。例如,它可以将常规的迭代器链(如 .iter())通过简单的更改(如更改为 .par_iter())变为并行迭代器,从而实现数据的并行处理。