fast_threadpool/
config.rs1use crate::*;
2
3#[derive(Clone, Copy, Debug)]
4pub struct ThreadPoolConfig {
6 pub(crate) keep_alive: Duration,
7 pub(crate) min_workers: NonZeroU16,
8 pub(crate) max_workers: NonZeroU16,
9 pub(crate) min_available_workers: NonZeroU16,
10 pub(crate) max_available_workers: NonZeroU16,
11 pub(crate) queue_size: Option<usize>,
12}
13
14impl Default for ThreadPoolConfig {
15 fn default() -> Self {
16 let min_workers = NonZeroU16::new(num_cpus::get() as u16)
17 .unwrap_or(unsafe { NonZeroU16::new_unchecked(4) });
18 ThreadPoolConfig {
19 keep_alive: Duration::from_secs(30),
20 min_workers,
21 max_workers: unsafe { NonZeroU16::new_unchecked(512) },
22 min_available_workers: unsafe { NonZeroU16::new_unchecked(4) },
23 max_available_workers: min_workers,
24 queue_size: Some(64),
25 }
26 }
27}
28
29impl ThreadPoolConfig {
30 pub fn low() -> Self {
32 ThreadPoolConfig {
33 keep_alive: Duration::from_secs(5),
34 min_workers: unsafe { NonZeroU16::new_unchecked(1) },
35 max_workers: unsafe { NonZeroU16::new_unchecked(3) },
36 min_available_workers: unsafe { NonZeroU16::new_unchecked(1) },
37 max_available_workers: unsafe { NonZeroU16::new_unchecked(3) },
38 queue_size: Some(4),
39 }
40 }
41 pub fn keep_alive(mut self, keep_alive: u64) -> Self {
43 self.keep_alive = Duration::from_secs(keep_alive);
44 self
45 }
46 pub fn min_workers(mut self, min_workers: NonZeroU16) -> Self {
48 self.min_workers = min_workers;
49 self
50 }
51 pub fn max_workers(mut self, max_workers: NonZeroU16) -> Self {
53 assert!(self.max_available_workers < max_workers);
54 self.max_workers = max_workers;
55 self
56 }
57 pub fn min_available_workers(mut self, min_available_workers: NonZeroU16) -> Self {
59 self.min_available_workers = min_available_workers;
60 self
61 }
62 pub fn max_available_workers(mut self, max_available_workers: NonZeroU16) -> Self {
64 assert!(max_available_workers < self.max_workers);
65 self.max_available_workers = max_available_workers;
66 self
67 }
68 pub fn queue_size(mut self, queue_size: Option<usize>) -> Self {
70 self.queue_size = queue_size;
71 self
72 }
73}