[−][src]Crate blackhole
Blackhole
...to throw your threads into.
Project
- Repository: https://bitbucket.org/haibison/blackhole-rs
- License: Nice License 1.0.0 (see LICENSE file at root directory of
master
branch) - This project follows Semantic Versioning 2.0.0
Features
Simple thread manager.
Design
It uses a channel and one job manager thread:
-
When you throw a new job, it checks for active job count.
-
If that count is smaller than limit, it spawns a new runner thread to run that job.
-
If that count is equal to limit:
- If job queue is smaller than limit, it pushes the job into the queue.
- Otherwise the job is discarded. An error message is printed to stderr. And the job is returned to you for recovery.
-
-
When the runner thread finishes the first job, it contacts job manager to ask for new jobs to run. If there are no new jobs, it finishes itself and notifies job manager about that.
-
When job manager receives job-finished-message, it checks job queue to spawn new runner threads, if necessary.
Examples
use blackhole::{ActiveLimit, Blackhole, Job}; /// # This job takes a `usize`, if it's odd, sends it to Printer struct Handler { data: usize, } impl Job for Handler { fn run(&mut self) -> Option<Box<Job>> { match self.data % 2 { 0 => None, _ => Some(Box::new(Printer { data: self.data })), } } } /// # This job prints data and does nothing else struct Printer { data: usize, } impl Job for Printer { fn run(&mut self) -> Option<Box<Job>> { println!("{}", self.data); None } } let active_limit = ActiveLimit::new(4); let queue_limit: usize = 10; let blackhole = Blackhole::make(active_limit, queue_limit).unwrap(); for i in 0 .. queue_limit * 2 { match blackhole.throw(Handler { data: i }) { Ok(None) => println!("Job is accepted"), // If job is discarded, it will be sent back here. Ok(Some(job)) => { eprintln!("Job is discarded! We'll run it ourselves!"); blackhole::run_to_end(job); }, Err(err) => { eprintln!("Blackhole is... exploded: {}", err); break; }, }; } blackhole.escape_on_idle().unwrap();
Modules
version_info |
|
Macros
get_online_processors | Gets online processors |
Structs
ActiveLimit | Active limit |
Blackhole | Blackhole |
OneTime | A job that runs once |
Constants
CODE_NAME | Crate code name |
ID | ID of this crate |
NAME | Crate name |
RELEASE_DATE | Crate release date (year/month/day) |
TAG | Tag, which can be used for logging... |
VERSION | Crate version |
Traits
Job | A job to be used by |
Functions
run_to_end | Runs a job to the end |
Type Definitions
Result | Result type used in this crate |