Crate scope_threadpool [−] [src]
Yet another implementation of a scoped threadpool.
This one is has the additional ability to store a mutable state in each thread, which permits you to, for example, reuse expensive to setup database connections, one per thread. Also, you can set a backlog which can prevent an explosion of memory usage if you have many jobs to start.
A scoped threadpool allows many tasks to be executed
in the current function scope, which means that
data doesn't need to have a 'static
lifetime.
Example
extern crate scope_threadpool; fn main() { // Create a threadpool holding 4 threads. let mut pool = scope_threadpool::Pool::new(4); let mut vec = vec![0, 0, 0, 0, 0, 0, 0, 0]; // Each thread can access the variables from // the current scope pool.scoped( |scoped| { let scoped = scoped.with_state(|| "costly setup function".len()); // each thread gets its own mutable copy of the result of // the above setup function // Create references to each element in the vector ... for e in &mut vec { scoped.execute( move |state| { *e += *state; } ); } } ); assert_eq!(vec, vec![21, 21, 21, 21, 21, 21, 21, 21]); }
Structs
Pool |
Holds a number of threads that you can run tasks on |
Scope |
Represents the current scope, you can execute functions in it. |
ScopeWithState |
Like |