docs: refine worker choice strategies documentation
[poolifier.git] / docs / worker-choice-strategies.md
1 # Worker choice strategies
2
3 All duration or timestamp are expressed in milliseconds.
4
5 ## Table of contents
6
7 - [Strategies](#strategies)
8 - [Fair share](#fair-share)
9 - [Weighted round robin](#weighted-round-robin)
10 - [Interleaved weighted round robin](#interleaved-weighted-round-robin)
11 - [Statistics](#statistics)
12 - [Simple moving median](#simple-moving-median)
13
14 ## Strategies
15
16 ### Fair share
17
18 Its goal is to distribute the load evenly across all workers. To achieve this, the strategy keeps track of the simple moving average task execution time for each worker and assigns the next task to the worker with the lowest task end prediction time: `task_end_prediction = max(current_time, task_end_prediction) + simple_moving_average_task_execution_time`.
19 By default, the strategy uses the simple moving average task execution time for each worker but it can be configured to use the simple moving average task event loop utilization (ELU) active time instead.
20
21 ### Weighted round robin
22
23 The worker weights are maximum tasks execution time, once the worker has reached its maximum tasks execution time, the next task is assigned to the next worker. The default worker weight is the same for each and computed given the CPU cores speed and theirs numbers.
24
25 ### Interleaved weighted round robin
26
27 The worker weights are maximum tasks execution time. The rounds are the deduplicated worker weights.
28 During a round, if worker weight is inferior to the current round weight, the next task is assigned to the next worker. Once all workers have been assigned a task, the next round starts.
29 The default worker weights is the same for each and computed given the CPU cores speed and theirs numbers. So the default 'rounds' consists of a unique worker weight.
30
31 ## Statistics
32
33 Worker choice strategies enable only the statistics that are needed to choose the next worker to avoid unnecessary overhead.
34
35 ### Simple moving median
36
37 Strategies using the simple moving average task execution time for each worker can use the simple moving median instead. Simple moving median is more robust to outliers and can be used to avoid assigning tasks to workers that are currently overloaded.