如何在执行期间使用所有处理器内核?
How do I use all processor cores during execution?
我正在 Rust 中编写线程程序。
Go has an environment variable GOMAXPROCS
which is used by the Go compiler to use the maximum amount of processor cores during execution. I found the RTRACEMAXPROCS
parameter here 经过多次搜索,但我找不到任何相关文档。
RTRACEMAXPROCS
参数是否与 Rust 的 GOMAXPROCS
相同?
在单个进程中使用超过 800K 线程是好的做法还是我应该使用多个进程?
通过查看源代码 RTRACEMAXPROCS
实际上不是 Rust 的一部分,而是示例中使用的程序的一部分。
作者只是简单地使用该环境变量来创建指定大小的线程池。
所以简短的回答是否定的,RTRACEMAXPROCS
和 GOMAXPROCS
不是一回事。
Rust 不再有绿色线程。您生成的每个 "task" 映射到一个真正的 OS 线程(这就是任务术语完全失宠的原因)。等价于 GOMAXPROCS
没有意义。
至于你问题的第二部分:800K 线程是荒谬的。它可能会工作,但不要指望它能像 Go 或 Erlang 的绿色线程那样工作。特别是,每个线程保留几兆字节的地址 space 和 至少 4 KiB 物理内存,加上 OS 线程需要的任何资源(不是很多,有人告诉我)。 "spawn concurrent workers for every little thing" 范式没有得到很好的支持。
我正在 Rust 中编写线程程序。
Go has an environment variable GOMAXPROCS
which is used by the Go compiler to use the maximum amount of processor cores during execution. I found the RTRACEMAXPROCS
parameter here 经过多次搜索,但我找不到任何相关文档。
RTRACEMAXPROCS
参数是否与 Rust 的 GOMAXPROCS
相同?
在单个进程中使用超过 800K 线程是好的做法还是我应该使用多个进程?
通过查看源代码 RTRACEMAXPROCS
实际上不是 Rust 的一部分,而是示例中使用的程序的一部分。
作者只是简单地使用该环境变量来创建指定大小的线程池。
所以简短的回答是否定的,RTRACEMAXPROCS
和 GOMAXPROCS
不是一回事。
Rust 不再有绿色线程。您生成的每个 "task" 映射到一个真正的 OS 线程(这就是任务术语完全失宠的原因)。等价于 GOMAXPROCS
没有意义。
至于你问题的第二部分:800K 线程是荒谬的。它可能会工作,但不要指望它能像 Go 或 Erlang 的绿色线程那样工作。特别是,每个线程保留几兆字节的地址 space 和 至少 4 KiB 物理内存,加上 OS 线程需要的任何资源(不是很多,有人告诉我)。 "spawn concurrent workers for every little thing" 范式没有得到很好的支持。