【发布时间】:2021-06-10 14:30:49
【问题描述】:
下面的 sn-p 显示了将迭代器映射到线程并收集到 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<_>>();
这不会启动所有线程运行(直到创建它们的操作系统)?换句话说,除了input的长度之外,将创建多少个线程并没有真正的限制。
假设这是真的,如果想要在不实例化collect 上的所有线程的情况下执行此模式,可能会使用另一种闭包,即thread::spawn(move || count_letters(&lines)) -> || thread::spawn(move || count_letters(&lines)),这会是 rust 风格吗?
【问题讨论】:
标签: multithreading rust iterator