使用Rust确定核心数

42

我想根据一台机器的核心数生成一定数量的任务。在Rust中,有没有可以找到核心数的功能,还是应该运行外部命令并解析输出?


是否有一种标准化的方式可以使线程数量可配置化,这将非常有用?可以采用环境变量和一个覆盖命令行选项的组合来实现。 - Mike Mestnik
4个回答

54

有一个crate可以实现这个功能:num_cpus。

参考资料:

在你的Cargo.toml中添加以下内容:

[dependencies]
num_cpus = "1.0"

然后在您的源代码中:

extern crate num_cpus;
let num = num_cpus::get();

2
如果您想获取物理核心数:num_cpus::get_physical() - Venryx

20
您可以在 Rust 1.59.0 中使用 std::thread::available_parallelism
use std::thread::available_parallelism;
let default_parallelism_approx = available_parallelism().unwrap().get();

在我的机器上,它返回了12,使用的是Ryzen 5 4600H处理器,这个数字与它拥有的逻辑处理器数量非常一致。


6
您可以使用std::os::num_cpus。例如:
fn main() {
    println!("{}", std::os::num_cpus());
}

@Arjan:哦,你说得对。default_sched_threads()是公开的,然而,应该可以在某种程度上用于OP的目的。 - rodrigo
19
现在std::os::num_cpus和default_sched_threads都已经消失了,因此这个问题现在没有答案。当这些答案被提出时是正确的,但Rust语言已经发生了变化。 - Russel Winder
替换了std::os::num_cpus的弃用功能。 - AAAfarmclub

0

现在可以使用:

std::os::num_cpus

pub fn num_cpus() -> uint

Rust版本:

$ rustc --version
rustc 0.13.0-nightly (d91a015ab 2014-11-14 23:37:27 +0000)

参考:

std::os::num_cpus


10
现在std::os::num_cpus和default_sched_threads已经被删除,因此这个问题现在无法回答。当提出这些问题时,答案是正确的,问题在于Rust语言发生了变化。 - Russel Winder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接