Documentation
# 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:

| Primes     | poolio     | threadpool |
| ---------- | ----------:| ----------:|
| 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).