本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。