Struct Channel

Source
pub(crate) struct Channel<T> {
    head: CachePadded<Position<T>>,
    tail: CachePadded<Position<T>>,
    receivers: SyncWaker,
    _marker: PhantomData<T>,
}
🔬This is a nightly-only experimental API. (mpmc_channel #126840)
Expand description

Unbounded channel implemented as a linked list.

Each message sent into the channel is assigned a sequence number, i.e. an index. Indices are represented as numbers of type usize and wrap on overflow.

Consecutive messages are grouped into blocks in order to put less pressure on the allocator and improve cache efficiency.

Fields§

§head: CachePadded<Position<T>>
🔬This is a nightly-only experimental API. (mpmc_channel #126840)

The head of the channel.

§tail: CachePadded<Position<T>>
🔬This is a nightly-only experimental API. (mpmc_channel #126840)

The tail of the channel.

§receivers: SyncWaker
🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Receivers waiting while the channel is empty and not disconnected.

§_marker: PhantomData<T>
🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Indicates that dropping a Channel<T> may drop messages of type T.

Implementations§

Source§

impl<T> Channel<T>

Source

pub(crate) fn new() -> Self

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Creates a new unbounded channel.

Source

fn start_send(&self, token: &mut Token) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Attempts to reserve a slot for sending a message.

Source

pub(crate) unsafe fn write(&self, token: &mut Token, msg: T) -> Result<(), T>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Writes a message into the channel.

Source

fn start_recv(&self, token: &mut Token) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Attempts to reserve a slot for receiving a message.

Source

pub(crate) unsafe fn read(&self, token: &mut Token) -> Result<T, ()>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Reads a message from the channel.

Source

pub(crate) fn try_send(&self, msg: T) -> Result<(), TrySendError<T>>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Attempts to send a message into the channel.

Source

pub(crate) fn send( &self, msg: T, _deadline: Option<Instant>, ) -> Result<(), SendTimeoutError<T>>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Sends a message into the channel.

Source

pub(crate) fn try_recv(&self) -> Result<T, TryRecvError>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Attempts to receive a message without blocking.

Source

pub(crate) fn recv( &self, deadline: Option<Instant>, ) -> Result<T, RecvTimeoutError>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Receives a message from the channel.

Source

pub(crate) fn len(&self) -> usize

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Returns the current number of messages inside the channel.

Source

pub(crate) fn capacity(&self) -> Option<usize>

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Returns the capacity of the channel.

Source

pub(crate) fn disconnect_senders(&self) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Disconnects senders and wakes up all blocked receivers.

Returns true if this call disconnected the channel.

Source

pub(crate) fn disconnect_receivers(&self) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Disconnects receivers.

Returns true if this call disconnected the channel.

Source

fn discard_all_messages(&self)

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Discards all messages.

This method should only be called when all receivers are dropped.

Source

pub(crate) fn is_disconnected(&self) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Returns true if the channel is disconnected.

Source

pub(crate) fn is_empty(&self) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Returns true if the channel is empty.

Source

pub(crate) fn is_full(&self) -> bool

🔬This is a nightly-only experimental API. (mpmc_channel #126840)

Returns true if the channel is full.

Trait Implementations§

Source§

impl<T> Drop for Channel<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for Channel<T>

§

impl<T> RefUnwindSafe for Channel<T>
where T: RefUnwindSafe,

§

impl<T> !Send for Channel<T>

§

impl<T> !Sync for Channel<T>

§

impl<T> Unpin for Channel<T>
where T: Unpin,

§

impl<T> !UnwindSafe for Channel<T>

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> 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> SizedTypeProperties for T

Source§

#[doc(hidden)] const IS_ZST: bool = _

🔬This is a nightly-only experimental API. (sized_type_properties)
true if this type requires no storage. false if its size is greater than zero. Read more
Source§

#[doc(hidden)] const LAYOUT: Layout = _

🔬This is a nightly-only experimental API. (sized_type_properties)
Source§

#[doc(hidden)] const MAX_SLICE_LEN: usize = _

🔬This is a nightly-only experimental API. (sized_type_properties)
The largest safe length for a [Self]. Read more
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.