futures_buffered

Struct BufferUnordered

source
pub struct BufferUnordered<S: Stream> { /* private fields */ }
Expand description

Stream for the buffered_unordered method.

§Examples

use futures::channel::oneshot;
use futures::stream::{self, StreamExt};
use futures_buffered::BufferedStreamExt;

let (send_one, recv_one) = oneshot::channel();
let (send_two, recv_two) = oneshot::channel();

let stream_of_futures = stream::iter(vec![recv_one, recv_two]);
let mut buffered = stream_of_futures.buffered_unordered(10);

send_two.send(2i32)?;
assert_eq!(buffered.next().await, Some(Ok(2i32)));

send_one.send(1i32)?;
assert_eq!(buffered.next().await, Some(Ok(1i32)));

assert_eq!(buffered.next().await, None);

§Benchmarks

§Speed

Running 65536 100us timers with 256 concurrent jobs in a single threaded tokio runtime:

futures::stream::BufferUnordered    time:   [420.33 ms 422.57 ms 424.83 ms]
futures_buffered::BufferUnordered   time:   [363.39 ms 365.59 ms 367.78 ms]

§Memory usage

Running 512000 Ready<i32> futures with 256 concurrent jobs.

  • count: the number of times alloc/dealloc was called
  • alloc: the number of cumulative bytes allocated
  • dealloc: the number of cumulative bytes deallocated
futures::stream::BufferUnordered
    count:    1024002
    alloc:    40960144 B
    dealloc:  40960000 B

futures_buffered::BufferUnordered
    count:    2
    alloc:    8264 B
    dealloc:  0 B

Trait Implementations§

source§

impl<St> Stream for BufferUnordered<St>
where St: Stream, St::Item: Future,

source§

type Item = <<St as Stream>::Item as Future>::Output

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
source§

impl<'__pin, S: Stream> Unpin for BufferUnordered<S>
where __Origin<'__pin, S>: Unpin,

Auto Trait Implementations§

§

impl<S> Freeze for BufferUnordered<S>
where S: Freeze,

§

impl<S> !RefUnwindSafe for BufferUnordered<S>

§

impl<S> Send for BufferUnordered<S>
where S: Send, <S as Stream>::Item: Send,

§

impl<S> Sync for BufferUnordered<S>
where S: Sync, <S as Stream>::Item: Sync,

§

impl<S> !UnwindSafe for BufferUnordered<S>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> BufferedStreamExt for T
where T: Stream + ?Sized,

source§

fn buffered_ordered(self, n: usize) -> BufferedOrdered<Self>
where Self::Item: Future, Self: Sized,

An adaptor for creating a buffered list of pending futures. Read more
source§

fn buffered_unordered(self, n: usize) -> BufferUnordered<Self>
where Self::Item: Future, Self: Sized,

An adaptor for creating a buffered list of pending futures (unordered). Read more
source§

fn for_each_concurrent<Fut, F>( self, limit: usize, f: F, ) -> ForEachConcurrent<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,

Runs this stream to completion, executing the provided asynchronous closure for each element on the stream concurrently as elements become available. Read more
source§

impl<T> BufferedTryStreamExt for T
where T: TryStream + ?Sized,

source§

fn try_buffered_ordered(self, n: usize) -> TryBufferedOrdered<Self>
where Self::Ok: TryFuture<Err = Self::Err>, Self: Sized,

An adaptor for creating a buffered list of pending futures. Read more
source§

fn try_buffered_unordered(self, n: usize) -> TryBufferUnordered<Self>
where Self::Ok: TryFuture<Err = Self::Err>, Self: Sized,

An adaptor for creating a buffered list of pending futures (unordered). Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T, E, S> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

source§

type Ok = T

source§

type Err = E

source§

impl<S, T, E> TryStream for S
where S: Stream<Item = Result<T, E>> + ?Sized,

source§

type Ok = T

The type of successful values yielded by this future
source§

type Error = E

The type of failures yielded by this future
source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_>, ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more