如何在执行期间使用所有处理器内核?

时间:2015-04-13 15:09:26

标签: multithreading rust

我正在Rust编写一个线程程序。

Go有一个环境变量GOMAXPROCS,Go编译器使用它来在执行期间使用最大数量的处理器内核。经过多次搜索后,我找到了RTRACEMAXPROCS参数here,但我找不到任何相关文档。

RTRACEMAXPROCS参数与Rust的GOMAXPROCS相同吗?

在单个过程中使用超过800K线程或者我应该使用多个进程是一种好习惯吗?

2 个答案:

答案 0 :(得分:3)

Rust不再拥有绿色线程了。每个"任务"你将地图生成到一个真正的操作系统线程(这就是为什么任务术语完全不受欢迎)。相当于GOMAXPROCS没有意义。

至于问题的第二部分:800K线程是荒谬的。它可能会起作用,但不要指望它能够像Go或Erlang的绿色线程那样工作。特别是,每个线程保留几兆字节的地址空间和至少 4 KiB物理内存,加上操作系统需要的任何资源(不是很多,我已被告知) 。 "为每件小事生成并发工作者"范式得不到很好的支持。

答案 1 :(得分:0)

从查看源RTRACEMAXPROCS的代码实际上并不是Rust的一部分,而是示例中使用的程序。

https://github.com/Byron/rust-tracer/blob/5f6008c6b3c97471d965ed3113be0b7d6800b289/src/rust/main.rs#L46-L53

作者只是使用该环境变量来创建指定大小的线程池。

如此简短的回答是否,RTRACEMAXPROCSGOMAXPROCS不是一回事。