Crate stuck

source · []
Expand description

Multi-threading task facility building on cooperative stackful coroutine

stuck provides a multi-threading runtime to serve lightweight concurrent tasks where you can use coroutine::suspension to cooperatively resume suspending coroutines.

Usage

Construct an runtime::Runtime to runtime::Runtime::spawn initial task.

Task

  • Use task::spawn to spawn new task in running task. The spawned task will run concurrent with all other tasks.
  • Use task::session to create facilities to wake waiting tasks.
  • Use task::JoinHandle to join task result.

Coroutine

Example

use stuck::{coroutine, task};

#[stuck::main]
fn main() {
    let twenty = task::spawn(|| {
        let five_coroutine = coroutine::spawn(|| 5);

        let (suspension, resumption) = coroutine::suspension::<i32>();
        coroutine::spawn(move || resumption.resume(5));

        let five_task = task::spawn(|| 5);

        let (session, waker) = task::session::<i32>();
        task::spawn(move || waker.wake(5));

        session.wait() + suspension.suspend() + five_coroutine.join().unwrap() + five_task.join().unwrap()
    });
    println!("twenty.join().unwrap(): {}", twenty.join().unwrap());
}

Modules

Structs

StackSize specifies desired stack size for new task.

Attribute Macros

Executes marked main function in configured runtime.

Executes marked test function in configured runtime.