Crate safina_threadpool
source · [−]Expand description
A threadpool.
You can use it alone or with safina
,
a safe async runtime.
Features
- Add closures or
FnOnce
to 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
unsafe
code
threadpool
- Popular
- Well maintained
- Dependencies have
unsafe
code
futures-executor
- Very popular
- Full of
unsafe
scoped_threadpool
- Popular
- Contains
unsafe
code
scheduled-thread-pool
- Used by a popular connection pool library
- Dependencies have
unsafe
code
workerpool
- Dependencies have
unsafe
code
- Dependencies have
threads_pool
- Full of
unsafe
- Full of
thread-pool
- Old
- Dependencies have
unsafe
code
tasque
- Dependencies have
unsafe
code
- Dependencies have
fast-threadpool
- Dependencies have
unsafe
code
- 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
schedule
andtry_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.toml
and 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.