Gives flexibility to the algorithm to select from a set of available prioritization approaches.
The threads are prioritized every time the master thread polls each individual thread.
When polling, a vector prioritization is created as a vector. The threads are approached in sequence
to pull away half the values in the queue.
The first thread in the vector then is either a laggard or has the maximum tasks in the queue or other parameter.
ThreadRunner is responsible for running the tasks within queue belonging to each thread. It manages the process within a run function that is effectively
a loop. The queue itself is a LimitedAccessQueue with the Secondary Accessor being available here
WorkerController is the core module and the brain responsible for raising the threads and managing the tasks across thread pools
in an efficient manner. It follows a primary task distribution, followed by task redistribution across threads on the principle of
stealing, followed by joining across threads to return.