Expand description
Yet another implementation of a scoped threadpool.
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.
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.
Example
extern crate pond;
fn main()
{
// Create a threadpool with the native number of cpus
let mut pool = pond::Pool::new();
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 runs 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!(*e, 21);
}
);
}
}
);
assert_eq!(vec, vec![21, 21, 21, 21, 21, 21, 21, 21]);
}
Structs
Holds a number of threads that you can run tasks on
Represents the current scope, you can execute
functions in it.
Like
Scope
, but the execute
function
accepts worker closures with a State parameter.