docs: improve documentation
[poolifier.git] / docs / worker-choice-strategies.md
CommitLineData
9e2ab226
JB
1# Worker choice strategies
2
4f8e444d
JB
3## Table of contents
4
5- [Strategies](#strategies)
6 - [Fair share](#fair-share)
7 - [Weighted round robin](#weighted-round-robin)
8 - [Interleaved weighted round robin](#interleaved-weighted-round-robin)
9- [Statistics](#statistics)
10 - [Median](#median)
c63b7b38 11
9e2ab226
JB
12## Strategies
13
4f8e444d
JB
14All duration or timestamp are expressed in milliseconds.
15
9e2ab226
JB
16### Fair share
17
18Its goal is to distribute the load evenly across all workers. To achieve this, the strategy keeps track of the 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) + average_task_execution_time`.
2567b3a3 19By default, the strategy uses the average task execution time for each worker but it can be configured to use the average task event loop utilization (ELU) active time instead.
9e2ab226
JB
20
21### Weighted round robin
22
251f0d71 23The 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 worker default weights are the same for all workers and is computed given the CPU cores speed and theirs numbers.
afe102b2 24
9e2ab226
JB
25### Interleaved weighted round robin
26
251f0d71 27The worker weights are maximum tasks execution time. The rounds are the deduplicated worker weights.
12d8ed1b 28During a round, if worker weight is inferior to the current round, the next task is assigned to the next worker. Once all workers have been assigned a task, the next round starts.
251f0d71
JB
29The worker default weights are the same for all workers and is computed given the CPU cores speed and theirs numbers. So the default rounds consists of a unique worker weight.
30
9e2ab226
JB
31## Statistics
32
afe102b2
JB
33Worker choice strategies enable only the statistics that are needed to choose the next worker to avoid unnecessary overhead.
34
9e2ab226
JB
35### Median
36
c63b7b38 37Strategies using the average task execution time for each worker can use the median instead. Median is more robust to outliers and can be used to avoid assigning tasks to workers that are currently overloaded. Median usage introduces a small overhead: measurement history must be kept for each worker and the median must be recomputed each time a task has finished.