Crates.io | async-pool |
lib.rs | async-pool |
version | 1.2.0 |
source | src |
created_at | 2024-08-19 18:44:24.170688 |
updated_at | 2024-09-17 15:48:58.894073 |
description | Statically allocated pool providing a std-like Box, with async functionality. |
homepage | |
repository | https://github.com/danielstuart14/async-pool |
max_upload_size | |
id | 1344331 |
size | 62,351 |
Statically allocated pool providing a std-like Box, allowing to asynchronously await for a pool slot to become available.
It is tailored to be used with no-std async runtimes, like Embassy, but can also be used in std environments (check examples).
The most common use-case is sharing large memory regions on constrained devices (e.g. microcontrollers), where multiple tasks may need to use the memory for buffering an I/O or performing calculations, and having separate static buffers would be too costly.
It is important to know that waiting forever for a memory slot to be available may dead-lock your code if done wrong. With that in mind, you should consider using a timeout when allocating asynchronously (e.g. embassy_time::with_timeout).
This crate requires a critical section implementation. Check critical-section.
use async_pool::{pool, Box};
struct Buffer([u8; 256]);
// A maximum of 2 Packet instances can be allocated at a time.
// A maximum of 3 futures can be waiting at a time.
pool!(BufferPool: [Buffer; 2], 3);
async fn run() {
// Allocate non-blocking (will return None if no data slot is available)
let box1 = Box::<BufferPool>::new(Buffer([0; 256]));
// Allocate asynchronously (will wait if no data slot is available)
// This can return None if all future slots are taken
let box2 = Box::<BufferPool>::new_async(Buffer([0; 256])).await;
}
This crate is heavily based on atomic-pool.
This work is licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.