rust-lang / futures-rs

Zero-cost asynchronous programming in Rust
https://rust-lang.github.io/futures-rs/
Apache License 2.0
5.34k stars 616 forks source link

Add `futures_util::io::{pipe,Pipe{Reader,Writer}}` for bytes channels #2764

Open oxalica opened 1 year ago

oxalica commented 1 year ago

This creates an efficient bounded bytes channel implementing Async{Read,Write}, similar to tokio::io::duplex but is unidirectional by default. It can be used glue together interfaces accepting a reader and a writer, or for testing other complex structures building on top of Async{Read,Write}.

It is implemented as a ring buffer with no allocation except for creation, and is able to limit the whole buffer size. Alternatives like channel::<Vec<u8>>()/into_async_read() cannot achieve these, and has a larger memory and/or CPU footprints.