如何解决将线程迭代器收集到向量中启动线程
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<_>>();
这不会启动所有线程运行(直到创建它们的操作系统)?换句话说,除了 input
的长度外,创建的线程数量没有实际限制。
假设这是真的,如果想在不实例化 collect
上的所有线程的情况下执行此模式,可能会使用另一个闭包,即 thread::spawn(move || count_letters(&lines))
-> || thread::spawn(move || count_letters(&lines))
,这会是铁锈风格?
解决方法
这不会启动所有线程运行(直到创建它们的操作系统)?
是的。从技术上讲,这里甚至不需要 collect
,for
就可以。
假设这是真的,如果想在收集时不实例化所有线程的情况下执行此模式,可能会使用另一个闭包
但是……为什么要为 spawn
或两个闭包烦恼呢?你可以把它放在你调用外部闭包的地方。
这会是铁锈风格吗?
rust 风格可能是使用 rayon。
如果您想手动执行此操作,则通常:创建一个队列(某种类型的 mpmc 通道,可能是有界的),无论您从队列中喂食多少工作人员,都生成它,将您的所有工作推送到队列中,然后以某种方式收集结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。