Update state diagram

This commit is contained in:
Dániel Buga 2024-12-17 18:17:36 +01:00
parent b51bd9ad04
commit 7d5fbe26c9
No known key found for this signature in database

View File

@ -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,