Rayon的并行性是否受限于机器的核心数量?
Rayon并行线程数量的限制机制
没错,Rayon默认就是根据机器的逻辑CPU核心数来限制并行线程数量的。你的机器是4核支持超线程,对应8个逻辑核心,所以Rayon默认的线程池大小就是8。
当你执行8次1秒休眠时,Rayon可以把每个任务分配到一个逻辑核心上并行执行,总耗时约1秒;当任务数增加到9时,前8个任务并行执行完(耗时1秒)后,第9个任务才会启动,因此总耗时约2秒。
如果需要自定义线程池大小,你有两种方式:
- 通过
RAYON_NUM_THREADS环境变量设置,比如在启动程序前执行export RAYON_NUM_THREADS=16 - 在代码中使用
ThreadPoolBuilder手动配置,示例代码如下:
use rayon::ThreadPoolBuilder; // 构建全局线程池并设置线程数为16 ThreadPoolBuilder::new().num_threads(16).build_global().unwrap();
调整后,当任务数不超过设置的线程数时,就能保持并行执行的效率。
内容的提问来源于stack exchange,提问作者Román Cárdenas
相关产品推荐
相关产品推荐

