embassy-executor

Crates

0.2.1

Versions

wasm

Flavors

Crate embassy_executor

Source
Expand description

§embassy-executor

An async/await executor designed for embedded usage.

  • No alloc, no heap needed. Task futures are statically allocated.
  • No “fixed capacity” data structures, executor works with 1 or 1000 tasks without needing config/tuning.
  • Integrated timer queue: sleeping is easy, just do Timer::after(Duration::from_secs(1)).await;.
  • No busy-loop polling: CPU sleeps when there’s no work to do, using interrupts or WFE/SEV.
  • Efficient polling: a wake will only poll the woken task, not all of them.
  • Fair: a task can’t monopolize CPU time even if it’s constantly being woken. All other tasks get a chance to run before a given task gets polled for the second time.
  • Creating multiple executor instances is supported, to run tasks with multiple priority levels. This allows higher-priority tasks to preempt lower-priority tasks.

Modules§

raw
Raw executor.

Structs§

Executor
WASM executor, wasm_bindgen to schedule tasks on the JS event loop.
SendSpawner
Handle to spawn tasks into an executor from any thread.
SpawnToken
Token to spawn a newly-created task in an executor.
Spawner
Handle to spawn tasks into an executor.

Enums§

SpawnError
Error returned when spawning a task.

Attribute Macros§

main
Creates a new executor instance and declares an application entry point for WASM spawning the corresponding function body as an async task.
task
Declares an async task that can be run by embassy-executor. The optional pool_size parameter can be used to specify how many concurrent tasks can be spawned (default is 1) for the function.