This class is responsible for deciding how many affective workers are needed. It also contains the logic for respawning workers when they are killed by the os.

The workers values are interpreted as follows:

value actual workers
-m num_cores - m workers (autoscale) (m < num_cores)
-1 num_cores - 1 workers (autoscale)
0 num_cores workers (autoscale)
1 single threaded mode (default)
n n workers