mirror of
https://github.com/embassy-rs/embassy.git
synced 2025-10-02 14:44:32 +00:00
Update state diagram
This commit is contained in:
parent
b51bd9ad04
commit
7d5fbe26c9
@ -50,33 +50,32 @@ use super::SpawnToken;
|
|||||||
/// A task's complete life cycle is as follows:
|
/// A task's complete life cycle is as follows:
|
||||||
///
|
///
|
||||||
/// ```text
|
/// ```text
|
||||||
/// ┌────────────┐ ┌────────────────────────┐
|
/// ┌────────────┐ ┌────────────────────────┐
|
||||||
/// ┌─►│Not spawned │◄─6┤Not spawned|Run enqueued│
|
/// │Not spawned │◄─5┤Not spawned|Run enqueued│
|
||||||
/// │ │ ├7─►│ │
|
/// │ ├6─►│ │
|
||||||
/// │ └─────┬──────┘ └──────▲─────────────────┘
|
/// └─────┬──────┘ └──────▲─────────────────┘
|
||||||
/// │ 1 │
|
/// 1 │
|
||||||
/// │ │ ┌────────────┘
|
/// │ ┌────────────┘
|
||||||
/// │ │ 5
|
/// │ 4
|
||||||
/// │ ┌─────▼────┴─────────┐
|
/// ┌─────▼────┴─────────┐
|
||||||
/// │ │Spawned|Run enqueued│
|
/// │Spawned|Run enqueued│
|
||||||
/// │ │ │
|
/// │ │
|
||||||
/// │ └─────┬▲─────────────┘
|
/// └─────┬▲─────────────┘
|
||||||
/// │ 2│
|
/// 2│
|
||||||
/// │ │3
|
/// │3
|
||||||
/// │ ┌─────▼┴─────┐
|
/// ┌─────▼┴─────┐
|
||||||
/// └─4┤ Spawned │
|
/// │ Spawned │
|
||||||
/// │ │
|
/// │ │
|
||||||
/// └────────────┘
|
/// └────────────┘
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
/// Transitions:
|
/// Transitions:
|
||||||
/// - 1: Task is spawned - `AvailableTask::claim -> Executor::spawn`
|
/// - 1: Task is spawned - `AvailableTask::claim -> Executor::spawn`
|
||||||
/// - 2: During poll - `RunQueue::dequeue_all -> State::run_dequeue`
|
/// - 2: During poll - `RunQueue::dequeue_all -> State::run_dequeue`
|
||||||
/// - 3: Task wakes itself, waker wakes task - `Waker::wake -> wake_task -> State::run_enqueue`
|
/// - 3: Task wakes itself, waker wakes task, or task exits - `Waker::wake -> wake_task -> State::run_enqueue`
|
||||||
/// - 4: Task exits - `TaskStorage::poll -> Poll::Ready`
|
/// - 4: A run-queued task exits - `TaskStorage::poll -> Poll::Ready`
|
||||||
/// - 5: A run-queued task exits - `TaskStorage::poll -> Poll::Ready`
|
/// - 5: Task is dequeued. The task's future is not polled, because exiting the task replaces its `poll_fn`.
|
||||||
/// - 6: Task is dequeued and then ignored via `State::run_dequeue`
|
/// - 6: A task is waken when it is not spawned - `wake_task -> State::run_enqueue`
|
||||||
/// - 7: A task is waken when it is not spawned - `wake_task -> State::run_enqueue`
|
|
||||||
pub(crate) struct TaskHeader {
|
pub(crate) struct TaskHeader {
|
||||||
pub(crate) state: State,
|
pub(crate) state: State,
|
||||||
pub(crate) run_queue_item: RunQueueItem,
|
pub(crate) run_queue_item: RunQueueItem,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user