本文简要介绍rust语言中 Function std::thread::available_parallelism
的用法。
用法
pub fn available_parallelism() -> Result<NonZeroUsize>
返回程序应使用的默认并行度的估计值。
并行性是一种资源。一台给定的机器提供了一定的并行能力,即它可以同时执行的计算数量的限制。这个数字通常对应于 CPU 或计算机的数量,但在各种情况下可能会有所不同。
诸如 VM 或容器编排器之类的主机环境可能希望限制其中的程序可用的并行量。这样做通常是为了限制(无意中)resource-intensive 程序对同一台机器上运行的其他程序的潜在影响。
限制
此 API 的目的是提供一种简单且可移植的方式来查询程序应使用的默认并行度。除其他外,它不公开有关 NUMA 区域的信息,不考虑(协)处理器能力的差异,并且不会修改程序的全局状态以更准确地查询可用并行度的数量。
资源限制可以在程序运行期间更改,因此不会缓存该值,而是在每次调用此函数时重新计算。不应从热代码中调用它。
此函数返回的值应被视为在任何给定时间可用的实际并行量的简化近似值。要更详细或更准确地了解程序可用的并行量,您可能还希望使用特定于平台的 API。以下平台限制当前适用于 available_parallelism
:
在 Windows 上:
- 它可能低估了具有超过 64 个逻辑 CPU 的系统上可用的并行量。但是,程序通常需要特定的支持才能利用超过 64 个逻辑 CPU,并且在没有此类支持的情况下,此函数返回的数字准确地反映了程序默认可以使用的逻辑 CPU 的数量。
- 它可能会高估受 process-wide 关联掩码或作业对象限制限制的系统上可用的并行量。
在 Linux 上:
- 当受 process-wide 关联掩码限制或受 cgroup 限制影响时,它可能会高估可用的并行量。
在所有目标上:
- 在具有 CPU 使用限制的 VM 中运行时(例如,过度使用的主机),它可能会高估可用的并行量。
错误
此函数将但不限于在以下情况下返回错误:
- 如果目标平台的并行量未知。
- 如果程序没有权限查询可用的并行量。
例子
#![feature(available_parallelism)]
use std::{io, thread};
fn main() -> io::Result<()> {
let count = thread::available_parallelism()?.get();
assert!(count >= 1_usize);
Ok(())
}
相关用法
- Rust assert_ne用法及代码示例
- Rust array.map用法及代码示例
- Rust assert_matches用法及代码示例
- Rust addr_of_mut用法及代码示例
- Rust alloc_zeroed用法及代码示例
- Rust array.split_array_ref用法及代码示例
- Rust array用法及代码示例
- Rust array.zip用法及代码示例
- Rust align_of用法及代码示例
- Rust always_abort用法及代码示例
- Rust assert_eq用法及代码示例
- Rust array.split_array_mut用法及代码示例
- Rust addr_of用法及代码示例
- Rust abort用法及代码示例
- Rust align_of_val用法及代码示例
- Rust array.each_mut用法及代码示例
- Rust assert用法及代码示例
- Rust array.each_ref用法及代码示例
- Rust args用法及代码示例
- Rust alloc用法及代码示例
- Rust args_os用法及代码示例
- Rust align_of_val_raw用法及代码示例
- Rust UdpSocket.set_multicast_loop_v6用法及代码示例
- Rust i64.overflowing_add_unsigned用法及代码示例
- Rust Box.downcast用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function std::thread::available_parallelism。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。