我正在尝试在异步环境(tokio)中加快 CPU 繁重的计算。我最初的解决方案是使用rayon::spawn
并行迭代器来实际执行。带有伪代码的最小示例:
for data in vec![data1, data2, data3] {
rayon::spawn(move || {
iproduct!(...)
.par_bridge()
.for_each(|...| process(data))
})
}
这一定是错误的,因为如上所述,所有任务都需要 2 小时才能运行,但如果我删除.par_bridge()
,那么第一个任务只需要 20 分钟(正如预期的那样,因为第一组数据要小得多),而其余任务则需要 4 小时以上。
我希望这不是 XY 问题。我究竟做错了什么?