Skip to main content

Arbiter

Struct Arbiter 

Source
pub struct Arbiter(/* private fields */);
Expand description

An asynchronous execution environment running on one OS thread.

Creating an arbiter starts a thread with its own local event loop. Futures spawned on that event loop are not required to implement Send. The system’s primary arbiter instead runs on the thread driving its SystemRunner.

Clones refer to the same arbiter and may be sent to other threads. Use handle to submit Send futures from another thread.

Implementations§

Source§

impl Arbiter

Source

pub fn current() -> Arbiter

Returns the arbiter running on the current thread.

§Panics

Panics if no arbiter is running on the current thread.

Source

pub fn stop(&self)

Requests that the arbiter stop its event loop.

This returns without waiting for shutdown; use join to wait for a spawned arbiter’s thread. To stop the primary arbiter’s event loop, stop its System or complete the future driving the system.

Source

pub fn new() -> Arbiter

Starts an arbiter on a new thread with an automatically generated name.

Uses the current system’s runner and thread configuration.

§Panics

Panics if no current system is installed or the arbiter thread cannot be started.

Source

pub fn with_name(name: String) -> Arbiter

Starts an arbiter on a new thread with the specified name.

Uses the current system’s runner and thread configuration.

§Panics

Panics if no current system is installed or the arbiter thread cannot be started.

Source

pub fn with_init<F>(name: String, init: F) -> Arbiter
where F: FnOnce() + Send + 'static,

Starts an arbiter on a new thread with the specified name.

init runs on the new thread before the arbiter’s runtime is created, for example to set the thread’s CPU affinity, so that the runtime’s memory is allocated on the NUMA node of that CPU. The new thread has no current system or arbiter during init, and its arbiter storage is cleared after init returns.

§Panics

Panics if no current system is installed, the thread cannot be started, or initialization fails, including a panic in init.

Source

pub fn id(&self) -> Id

Returns the arbiter identifier.

Source

pub fn name(&self) -> &str

Returns the arbiter name.

Source

pub fn handle(&self) -> &Handle

Returns a handle to the arbiter’s runtime.

Source

pub fn latency(&self) -> Option<LatencyMetrics>

Returns the arbiter’s scheduling latency.

Returns None if latency sampling is disabled, see Builder::latency_interval.

Source

pub fn is_running(&self) -> bool

Returns whether the arbiter is running.

A stop request does not change this immediately. The flag is cleared after the event loop exits, before on_stop callbacks.

Source

pub fn get_value<T, F>(f: F) -> T
where T: Clone + 'static, F: FnOnce() -> T,

Returns a value from thread-local arbiter storage, inserting it if absent.

Values are keyed by type and shared with get_item, set_item, and with_item on the calling thread. Existing values are cloned. The initializer runs while storage is mutably borrowed and must not reenter these storage APIs.

If the storage has already been destroyed because the thread is exiting, the value returned by f is not stored.

Source

pub fn on_shutdown<F>(f: F)
where F: FnOnce() + 'static,

Registers a callback to run when the current thread’s arbiter shuts down.

Callbacks run once, in registration order, on the arbiter’s thread when its stop is requested, by Arbiter::stop() or System::stop(), while the event loop is still running. An arbiter that ends without a stop request, such as one driven by SystemRunner::block_on(), runs them once its event loop has exited instead. A callback registered by another callback runs in the same shutdown.

If the thread is exiting and its thread-local storage has already been destroyed, f is dropped without running. If f panics after the event loop panicked, the process is aborted.

Source

pub fn on_stop<F>(self, f: F) -> Self
where F: Fn() + Send + Sync + 'static,

Adds a callback to run after the arbiter stops.

The callback runs on the arbiter thread after its event loop exits and its running flag is cleared. Register before shutdown; registration after finalization does not invoke the callback.

If f panics after the event loop panicked, the process is aborted.

Source

pub fn join(&mut self) -> Result<()>

Waits for the arbiter’s thread to stop.

This returns immediately for an arbiter that does not own a thread handle, including the system’s primary arbiter. The join handle is shared by all clones and consumed by the first call. This does not request a stop.

§Errors

Returns the panic payload if the arbiter thread panicked.

§Panics

May panic when attempting to join the current thread.

Trait Implementations§

Source§

impl Clone for Arbiter

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Arbiter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Arbiter

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Arbiter

Source§

impl PartialEq for Arbiter

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.