18 releases

0.2.0-alpha.6 Sep 30, 2019
0.2.0-alpha.4 Aug 29, 2019
0.1.10 Feb 5, 2020
0.1.8 Jul 3, 2019
0.1.2 Mar 30, 2018

#72 in #blocking

Download history 34507/week @ 2023-11-30 37436/week @ 2023-12-07 33102/week @ 2023-12-14 19353/week @ 2023-12-21 21106/week @ 2023-12-28 33801/week @ 2024-01-04 33089/week @ 2024-01-11 35802/week @ 2024-01-18 34449/week @ 2024-01-25 35496/week @ 2024-02-01 35384/week @ 2024-02-08 42102/week @ 2024-02-15 43867/week @ 2024-02-22 46631/week @ 2024-02-29 44639/week @ 2024-03-07 37782/week @ 2024-03-14

181,085 downloads per month
Used in fewer than 41 crates

MIT license

300KB
5K SLoC

tokio-executor

Task execution related traits and utilities.

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Tokio by you, shall be licensed as MIT, without any additional terms or conditions.


lib.rs:

Task execution related traits and utilities.

In the Tokio execution model, futures are lazy. When a future is created, no work is performed. In order for the work defined by the future to happen, the future must be submitted to an executor. A future that is submitted to an executor is called a "task".

The executor is responsible for ensuring that Future::poll is called whenever the task is notified. Notification happens when the internal state of a task transitions from not ready to ready. For example, a socket might have received data and a call to read will now be able to succeed.

This crate provides traits and utilities that are necessary for building an executor, including:

  • The Executor trait spawns future object onto an executor.

  • The TypedExecutor trait spawns futures of a specific type onto an executor. This is used to be generic over executors that spawn futures that are either Send or !Send or implement executors that apply to specific futures.

  • enter marks that the current thread is entering an execution context. This prevents a second executor from accidentally starting from within the context of one that is already running.

  • DefaultExecutor spawns tasks onto the default executor for the current context.

  • Park abstracts over blocking and unblocking the current thread.

Implementing an executor

Executors should always implement TypedExecutor. This usually is the bound that applications and libraries will use when generic over an executor. See the trait documentation for more details.

If the executor is able to spawn all futures that are Send, then the executor should also implement the Executor trait. This trait is rarely used directly by applications and libraries. Instead, tokio::spawn is configured to dispatch to type that implements Executor.

Dependencies

~0.8–1MB
~19K SLoC