# poolio
[![crates.io][crates-badge]][crates-url]
[![GPL licensed][license-badge]][license-url]
[![CI][actions-badge]][actions-url]
[crates-badge]: https://img.shields.io/crates/v/poolio.svg
[crates-url]: https://crates.io/crates/poolio
[license-badge]: https://img.shields.io/badge/license-GPL-blue.svg
[license-url]: ./Cargo.toml
[actions-badge]: https://github.com/shtsoft/poolio/actions/workflows/ci.yaml/badge.svg
[actions-url]: https://github.com/shtsoft/poolio/actions/workflows/ci.yaml
A **simple** and **safe** and **fast** thread-pool based on pure message-passing concurrency defying the mainstream.
- simplicity:
* small API
* less than 300 lines of code
- safety:
* no dependencies (apart from crossbeam)
* thoroughly tested
* memory-safety: no `unsafe`-code
* thread-safety:
+ no data races
+ no deadlocks
- performance:
* [crossbeam](https://github.com/crossbeam-rs/crossbeam)-channels
* as fast as the most popular Rust [threadpool](https://github.com/rust-threadpool/rust-threadpool) (see [Benches](#benches))
For documumentation see [Released API docs](https://docs.rs/poolio).
In particular, you can find a design- and usage-description there.
### Benches
The [benches](benches) pit poolio against [threadpool](https://github.com/rust-threadpool/rust-threadpool) in a battle of computing various lists of primes and writing them to a sink.
On a computer 'Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz' (6 cores and 12 CPUs) running x86\_64 GNU/Linux we measured the following average times for executing the job:
| 6 workers | 27.468 ms | 28.431 ms |
| 12 workers | 24.056 ms | 23.456 ms |
This suggests that the poolio and threadpool are equally performant.
The full result can be downloaded [here](https://github.com/shtsoft/poolio/releases/latest/download/benches.tar.gz).
(The benchmarks are powered by [criterion](https://github.com/bheisler/criterion.rs).)
## Contributing
If you want to contribute: [CONTRIBUTING](CONTRIBUTING.md).
### Security
For security-related issues see: [SECURITY](SECURITY.md).