Multithreading 在多个线程中在范围内运行函数

Multithreading 在多个线程中在范围内运行函数,multithreading,rust,Multithreading,Rust,我有一个功能 fn计算(x:i64)->i64{ //做事 x } 我想将其应用于某个范围 0..100中的i的{ 计算(i); } 我想多线程处理这个问题。我尝试过不同的事情:拥有一个原子的I是个好主意,但接下来我必须使用库等深入了解共享所有权的细节。。。有一种简单的方法可以做到这一点吗?对于您想要精确实现的目标并不十分确定,但这里有一个简单的例子 让th:Vec=(0..4)//将启动四个线程 .map(| t|{ std::thread::spawn(移动| |){ 让我们开始=t*2

我有一个功能

fn计算(x:i64)->i64{
//做事
x
}
我想将其应用于某个范围

0..100中的i的
{
计算(i);
}

我想多线程处理这个问题。我尝试过不同的事情:拥有一个原子的
I
是个好主意,但接下来我必须使用库等深入了解共享所有权的细节。。。有一种简单的方法可以做到这一点吗?

对于您想要精确实现的目标并不十分确定,但这里有一个简单的例子

让th:Vec=(0..4)//将启动四个线程
.map(| t|{
std::thread::spawn(移动| |){
让我们开始=t*25;
设端=(t+1)*25;
对于begin..end{//中的i,每一个都处理总计算量的四分之一
设r=计算(i);
println!(“t={}i={}r={}”,t,i,r);
}
})
})
.收集();
对于th{//中的t,等待四个线程终止
让ut=join();
}

对于您想要实现的目标并不十分确定,但这里有一个简单的例子

让th:Vec=(0..4)//将启动四个线程
.map(| t|{
std::thread::spawn(移动| |){
让我们开始=t*25;
设端=(t+1)*25;
对于begin..end{//中的i,每一个都处理总计算量的四分之一
设r=计算(i);
println!(“t={}i={}r={}”,t,i,r);
}
})
})
.收集();
对于th{//中的t,等待四个线程终止
让ut=join();
}

如果您只想在多个线程上运行stuff,而不真正关心具体细节,可能会有帮助:

use rayon::prelude::*;

fn calculate(x: i64) -> i64 {
    x
}

fn main() {
    let results = (0..100i64)
        .into_par_iter()
        .map(calculate)
        .collect::<Vec<i64>>();
        
    
    println!("Results: {:?}", results);
}
使用人造丝::前奏::*;
fn计算(x:i64)->i64{
x
}
fn main(){
让结果=(0..100i64)
.into_par_iter()
.map(计算)
收集::();
println!(“结果:{:?}”,结果);
}

这将根据您拥有的内核数量自动启动线程,并在它们之间分配工作。

如果您只想在多个线程上运行东西,而不真正关心细节,可能会有帮助:

use rayon::prelude::*;

fn calculate(x: i64) -> i64 {
    x
}

fn main() {
    let results = (0..100i64)
        .into_par_iter()
        .map(calculate)
        .collect::<Vec<i64>>();
        
    
    println!("Results: {:?}", results);
}
使用人造丝::前奏::*;
fn计算(x:i64)->i64{
x
}
fn main(){
让结果=(0..100i64)
.into_par_iter()
.map(计算)
收集::();
println!(“结果:{:?}”,结果);
}
这将根据您拥有的内核数量自动加速线程,并在它们之间分配工作