gpt4 book ai didi

multithreading - 将线程的迭代器收集到向量中以启动线程

转载 作者:行者123 更新时间:2023-12-03 11:43:47 26 4
gpt4 key购买 nike

以下代码段显示了将迭代器映射到线程中并收集到Vec

let workers = input
.chunks(chunk_size)
.map(|chunk| {
let lines = chunk.iter().map(|s| s.to_string()).collect::<Vec<_>>();
thread::spawn(move || count_letters(&lines))
})
.collect::<Vec<_>>();
这不会启动所有正在运行的线程(直到由OS创建它们)吗?换句话说,除了 input的长度之外,对创建多少个线程没有实际限制。
假设这是真的,如果一个人想要在不实例化 collect的所有线程的情况下执行此模式,是否可以使用另一种闭包(即 thread::spawn(move || count_letters(&lines))-> || thread::spawn(move || count_letters(&lines))),这是否会成为 rust 迹样式?

最佳答案

Won't this start all threads running (up to the os creating them)?


是的。从技术上讲,这里甚至不需要 collect,而 for则需要。

Assuming this is true, if one wanted to do this pattern without instantiating all the threads upon collect, might one use another closure


但是然后...为什么还要麻烦 spawn或两个闭包呢?您可以将其放置在称为外部闭包的位置。

would this be the rust style?


防 rust 样式可能是使用 rayon
如果您想手动执行此操作,则可以按照通常的方式进行操作:创建一个队列(某种mpmc channel ,可能有界),从队列中派生出您需要喂食的许多工作人员,将所有工作插入队列中,然后收集结果以某种方式。

关于multithreading - 将线程的迭代器收集到向量中以启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66602165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com