1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
use num_cpus;

/// Computes the number of Sync workers based on the block factor.
/// More io time (block time) implicates in a larger number of workers.
pub fn n_workers(block_factor: f32) -> usize {
    if block_factor >= 1.0 {
        panic!("Block factor should be lower than 1.0");
    }

    let cpus = num_cpus::get() as f32;
    let multiplier = 1. / (1.0 - block_factor);
    (cpus * multiplier).ceil() as usize
}