use crate::constants;
pub fn num_threads_for_items(num_items: usize) -> usize {
let num_workers = parse_num_threads_env();
num_workers.min(num_items).max(1)
}
pub fn default_num_threads() -> usize {
parse_num_threads_env()
}
fn parse_num_threads_env() -> usize {
if let Ok(num_threads) = std::env::var("OXEN_NUM_THREADS") {
if let Ok(num_threads) = num_threads.parse::<usize>() {
num_threads
} else {
get_default_num_workers()
}
} else {
get_default_num_workers()
}
}
fn get_default_num_workers() -> usize {
let num_cpus = num_cpus::get();
if constants::DEFAULT_NUM_WORKERS > num_cpus {
num_cpus
} else {
constants::DEFAULT_NUM_WORKERS
}
}
#[cfg(test)]
mod tests {
use super::num_threads_for_items;
#[test]
fn test_num_threads_for_items_never_zero() {
assert_eq!(num_threads_for_items(0), 1);
}
}