apprentice/README.md

37 lines
1.8 KiB
Markdown
Raw Permalink Normal View History

# Apprentice #
A task based thread scheduling library. It will track and maintain
compute and blocking threads. The scheduler will then handle issuing tasks
amoung the threads it maintains.
## Threads ##
Threads are implemented using the Rust standard library threads. These will
be managed by a scheduler. Each scheduler has two types of threads that it
distinguishes against. Blocking and Compute.
### Blocking ###
Blocking threads are threads with tasks that will block while they are
being processed. Tasks that do not block can be run here as well if you need
to spawn more threads than the scheduler keeps alive for compute threads.
However, non blocking tasks would be better run on a compute thread.
### Compute ###
Compute threads are threads with tasks that will never block. This is
a strict requirement that the programmer must adhere to. Compute threads and
task sharing will not work if all the available compute threads are blocked.
## Tasks ##
Tasks are the thread safe portions of code that you wish to write. These
can be blocking or non blocking. If a task is marked as Immortal, then like
the pheonix, when it is finished processing the reset function will be called
and the task will be set to run again. By default, however, tasks are Mortal
and will not be reset and reprocessed.
## Scheduler ##
The scheduler creates and maintains all the compute and blocking threads
it needs to run and processs tasks given to it. The scheduler will destroy
threads that it determines are not needed. You can create multiple schedulers
and each one will maintain its own set of threads and tasks. A single, program
wide scheduler, can be created and accessed by libraries that need to spawn
tasks as well. It is recommended to use this as your main scheduler and it
can be set and retieved by your program.