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
impl Arbiter
Sourcepub fn current() -> Arbiter
pub fn current() -> Arbiter
Returns the arbiter running on the current thread.
§Panics
Panics if no arbiter is running on the current thread.
Sourcepub fn new() -> Arbiter
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.
Sourcepub fn with_name(name: String) -> Arbiter
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.
Sourcepub fn with_init<F>(name: String, init: F) -> Arbiter
pub fn with_init<F>(name: String, init: F) -> Arbiter
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.
Sourcepub fn latency(&self) -> Option<LatencyMetrics>
pub fn latency(&self) -> Option<LatencyMetrics>
Returns the arbiter’s scheduling latency.
Returns None if latency sampling is disabled, see
Builder::latency_interval.
Sourcepub fn is_running(&self) -> bool
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.
Sourcepub fn get_value<T, F>(f: F) -> T
pub fn get_value<T, F>(f: F) -> 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.
Sourcepub fn on_shutdown<F>(f: F)where
F: FnOnce() + 'static,
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.
Sourcepub fn on_stop<F>(self, f: F) -> Self
pub fn on_stop<F>(self, f: F) -> Self
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.
Sourcepub fn join(&mut self) -> Result<()>
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.