mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-29 00:00:11 +02:00
threadpool: update to std::future (#1219)
An initial pass at updating `tokio-threadpool` to `std::future`. The codebase and tests both now run using `std::future` but the wake mechanism is not ideal. Follow up work will be required to improve on this. Refs: #1200
This commit is contained in:
@@ -5,43 +5,6 @@ threads.
|
||||
|
||||
[Documentation](https://docs.rs/tokio-threadpool/0.1.14/tokio_threadpool)
|
||||
|
||||
### Why not Rayon?
|
||||
|
||||
Rayon is designed to handle parallelizing single computations by breaking them
|
||||
into smaller chunks. The scheduling for each individual chunk doesn't matter as
|
||||
long as the root computation completes in a timely fashion. In other words,
|
||||
Rayon does not provide any guarantees of fairness with regards to how each task
|
||||
gets scheduled.
|
||||
|
||||
On the other hand, `tokio-threadpool` is a general purpose scheduler and
|
||||
attempts to schedule each task fairly. This is the ideal behavior when
|
||||
scheduling a set of unrelated tasks.
|
||||
|
||||
### Why not futures-cpupool?
|
||||
|
||||
It's 10x slower.
|
||||
|
||||
## Examples
|
||||
|
||||
```rust
|
||||
use tokio_threadpool::ThreadPool;
|
||||
use futures::{Future, lazy};
|
||||
use futures::sync::oneshot;
|
||||
|
||||
pub fn main() {
|
||||
let pool = ThreadPool::new();
|
||||
let (tx, rx) = oneshot::channel();
|
||||
|
||||
pool.spawn(lazy(|| {
|
||||
println!("Running on the pool");
|
||||
tx.send("complete").map_err(|e| println!("send error, {}", e))
|
||||
}));
|
||||
|
||||
println!("Result: {:?}", rx.wait());
|
||||
pool.shutdown().wait().unwrap();
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the [MIT license](LICENSE).
|
||||
|
||||
Reference in New Issue
Block a user