The Scheduler
-------------
:Author: CehTeh
:Date: 6/2007

//MENU: label Scheduler

Scheduling is done with two priority queues, one for high priority jobs and one for low priority jobs.
These priority queues are ordered by absolute time values plus some job specific identified.

There are following (non exhaustive) kinds of jobs:

* started job
* job to be canceled
* unscheduled job
* dependency providing jobs

Jobs implement a kind of future. We try hard to avoid any blocking waits.
The Job scheduler runs singlethreaded. Its only task is to schedule and delegate jobs to worker threads,
by itself it will never do any extensive processing.

Each job has an pre configured behaviour for the case of failure or deadline miss.
Any canceling and expireing jobs gets noted in *Statistics* to adjust performance and timings
for optimal performance and I/O throughput.

