plunger

Crates.ioplunger
lib.rsplunger
version0.1.0-rc.5
created_at2025-08-25 13:32:52.887937+00
updated_at2025-08-30 18:54:43.466769+00
descriptionPlunger helps you quickly unblock your async tasks
homepage
repositoryhttps://github.com/conradludgate/plunger
max_upload_size
id1809613
size110,665
Conrad Ludgate (conradludgate)

documentation

README

Plunger quickly unblocks your async tasks.

This crate is designed to help you run CPU intensive code in your async applications. It does so with 0 allocations per task, and intends to allow in-place initialisation of responses.

Example

#[tokio::main]
async fn main() {
    let hash = "$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQAAAAAAAAAAA$+r0d29hqEB0yasKr55ZgICsQGSkl0v0kgwhd+U3wyRo";
    let password = "password";

    plunger::unblock(move || password_auth::verify_password(password, hash))
        .await
        .unwrap();
}

Important notes

While the intent is to unblock the async runtime, this API might have to defensively block the runtime if cancellation occurs while the task is running.

We assume the following:

  1. Cancellation is rare
  2. Tasks run in the range of 100us to 1ms
  3. We can use block_in_place to reduce the impact of blocking when the tokio feature is enabled and using a multithreaded runtime.
Commit count: 19

cargo fmt