mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-08 00:00:13 +02:00
Introduce the Tokio runtime: Reactor + Threadpool (#141)
This patch is an intial implementation of the Tokio runtime. The Tokio runtime provides an out of the box configuration for running I/O heavy asynchronous applications. As of now, the Tokio runtime is a combination of a work-stealing thread pool as well as a background reactor to drive I/O resources. This patch also includes tokio-executor, a hopefully short lived crate that is based on the futures 0.2 executor RFC. * Implement `Park` for `Reactor` This enables the reactor to be used as the thread parker for executors. This also adds an `Error` component to `Park`. With this change, a `Reactor` and a `CurrentThread` can be combined to achieve the capabilities of tokio-core.
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# Tokio Thread Pool
|
||||
|
||||
A library for scheduling execution of futures concurrently across a pool of
|
||||
threads.
|
||||
|
||||
**Note**: This library isn't quite ready for use.
|
||||
|
||||
### 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
|
||||
extern crate tokio_threadpool;
|
||||
extern crate futures;
|
||||
|
||||
use tokio_threadpool::*;
|
||||
use futures::*;
|
||||
use futures::sync::oneshot;
|
||||
|
||||
pub fn main() {
|
||||
let (tx, _pool) = ThreadPool::new();
|
||||
|
||||
let res = oneshot::spawn(future::lazy(|| {
|
||||
println!("Running on the pool");
|
||||
Ok::<_, ()>("complete")
|
||||
}), &tx);
|
||||
|
||||
println!("Result: {:?}", res.wait());
|
||||
}
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
`tokio-threadpool` is primarily distributed under the terms of both the MIT
|
||||
license and the Apache License (Version 2.0), with portions covered by various
|
||||
BSD-like licenses.
|
||||
|
||||
See LICENSE-APACHE, and LICENSE-MIT for details.
|
||||
Reference in New Issue
Block a user