使用Rust Rayon库提升程序运行速度

本文是对 N倍性能提升!无痛Rust并行编程:Rayon库初体验[1]的学习与记录

有这样一段程序,计算1到1亿的连续数字之和

复制代码
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思想,让负载不高的线程,去分担其他线程的工作

在cargo.toml文件的dependence处新增 rayon = "1.8"

在代码中use rayon::prelude::*;

同时将 input.iter().map(|&i| i + i).sum() 改为 input.par_iter().map(|&i| i + i).sum()即可。 par即parallel

复制代码
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 --release

结果为:

复制代码
9999999900000000
Ok(29.368ms)

提升了一倍有余。

如果不加 --release,相差更多。

rayon相关代码解析[2]

更多阅读

【每周一库】- Rayon 数据并行计算库[3]

Rust Cookbook 中文版-数据并行[4] 和 Rust 烹饪书-并行任务[5] 只有翻译的区别

参考资料

1

N倍性能提升!无痛Rust并行编程:Rayon库初体验: https://www.bilibili.com/video/BV1Rz4y1P791

2

rayon相关代码解析: https://github.com/cuishuang/explain-rust-source-code-by-chatgpt/tree/main/rayon

3

【每周一库】- Rayon 数据并行计算库: https://rustcc.cn/article?id=181e0a73-6742-42a9-b7a1-1c00bef436c2

4

Rust Cookbook 中文版-数据并行: https://rustwiki.org/zh-CN/rust-cookbook/concurrency/parallel.html

5

Rust 烹饪书-并行任务: https://llever.com/rust-cookbook-zh/concurrency/parallel.zh.html

本文由mdnice多平台发布

相关推荐
马可家的菠萝7 小时前
收藏不是终点:一个真正有用的个人知识库,至少要完成“收集 → 理解 → 行动”
前端·后端·架构
东小西7 小时前
【SAA实战】第 2 篇:模型与消息——ReactAgent 怎么挑模型、怎么传消息
java·后端·spring
qo_tn8 小时前
Docker_02-容器操作_11-怎样进入容器执行命令
后端
架构精进之路8 小时前
Claude Code 深度使用指南:从"会用"到"用好"的7个进阶心法
后端·openai·ai编程
明月_清风8 小时前
看完 DSH 文档后,我总结了这 7 个关键点
前端·后端·deepseek
元界metalite8 小时前
Spring-MVC微服务接口怎么分层-网关Controller与Service边界
后端
省长8 小时前
不想写代码,但想要集成一个登录页面?Sa-Token-Quick-Login 帮你实现!
java·后端·开源
铁皮饭盒8 小时前
浏览器AI肯定离不开onnxruntime, 微软开源
前端·javascript·后端
得物技术8 小时前
企业级 MultiAgent 的记忆系统:短期上下文与四层记忆架构实现|得物技术
java·人工智能·后端
MacroZheng8 小时前
又一个神级画图Skill开源,再见draw.io!
java·人工智能·后端