WorkerManager.run(timeout) (see diagram below) tries to process as
many tasks from queue as possible within specified timeout. The task
heavy-lifting is done in separate independent background daemons,
one for each task (daemons follow
BackgroundWorker class abstraction, see
e.g. Backend build process example).
Note that tasks which are not finished after one run() call are still tracked in internal queue structure, and will be finished in one of the subsequent run() calls.
Since the spawned workers are background (daemon) jobs, we use Redis DB for
WorkerManager <-> BackgroundWorker communication; that said
the job status from the background worker.