Crate safina_threadpool
source · [−]Expand description
A threadpool.
You can use it alone or with safina,
a safe async runtime.
Features
- Add closures or
FnOnceto the pool - One of the pool’s threads will execute it
- Automatically restarts panicked threads
forbid(unsafe_code)- Depends only on
std - 100% test coverage
Limitations
- Allocates memory
- Not optimized
Documentation
https://docs.rs/safina-threadpool
Examples
let pool =
safina_threadpool::ThreadPool::new("worker", 2);
let receiver = {
let (sender, receiver) =
std::sync::mpsc::channel();
for data in data_source {
let sender_clone = sender.clone();
pool.schedule(
move || process_data(data, sender_clone));
}
receiver
};
let results: Vec<ProcessResult> =
receiver.iter().collect();
// ...Alternatives
blocking- Popular
- A little
unsafecode
threadpool- Popular
- Well maintained
- Dependencies have
unsafecode
futures-executor- Very popular
- Full of
unsafe
scoped_threadpool- Popular
- Contains
unsafecode
scheduled-thread-pool- Used by a popular connection pool library
- Dependencies have
unsafecode
workerpool- Dependencies have
unsafecode
- Dependencies have
threads_pool- Full of
unsafe
- Full of
thread-pool- Old
- Dependencies have
unsafecode
tasque- Dependencies have
unsafecode
- Dependencies have
fast-threadpool- Dependencies have
unsafecode
- Dependencies have
blocking-permit- Full of
unsafe
- Full of
rayon-core- Full of
unsafe
- Full of
Changelog
- v0.1.4 - Stop threads on drop.
- v0.1.3 - Support stable Rust! Needs 1.51+.
- v0.1.2 - Add another example
- v0.1.1 - Simplified internals and improved documentation.
- v0.1.0 - First release
TO DO
- DONE - Add
scheduleandtry_schedule - DONE - Add tests
- DONE - Add docs
- DONE - Publish on crates.io
- Add a stress test
- Add a benchmark. See benchmarks in https://crates.io/crates/executors
- Add a way for a job to schedule another job on the same thread, with stealing.
Release Process
- Edit
Cargo.tomland bump version number. - Run
./release.sh
Structs
Returned by try_schedule
when the queue is full.
This can happen when the program schedules many closures at one time.
It can also happen when closures panic their threads. The pool’s
throughput goes down when it must create new threads.
A collection of threads and a queue for jobs (FnOnce structs) they execute.