本文主要是介绍【每周一库】- Rayon 数据并行计算库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Rayon - 数据并行计算库
Rayon 是一个Rust的数据并行计算库。它非常轻巧,可以轻松地将顺序计算转换为并行计算。同时保证不会有数据争用情况出现。
并行迭代器
使用Rayon,可以轻松地将顺序迭代器转换为并行迭代器:通常,只需将您的foo.iter()
调用更改为foo.par_iter()
,其余则由Rayon完成:
use rayon::prelude::*;
fn sum_of_squares(input: &[i32]) -> i32 {input.par_iter() // <-- 只需要更改这里.map(|&i| i * i).sum()
}
并行迭代器负责确定如何将数据划分为任务;它会动态适应以达到最佳性能。如果你需要更大的灵活性,那么Rayon还提供了join
和scope
函数,允许用户自己创建并行任务。为了获得更多控制,还可以创建自定义线程池,而不是使用Rayon的默认全局线程池。
无数据争用
通常大家可能觉得并行执行会产生各种疯狂的错误。不用紧张,Rayon的API均保证无数据争用情况发生,通常可以排除大多数并行错误(尽管不是全部)。换句话说,只要代码通过编译,它通常会执行与非并行情况下相同的操作。
对于大多数情况,使用并行迭代器产生可以保证结果
这篇关于【每周一库】- Rayon 数据并行计算库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!