Struct tokio::runtime::scheduler::multi_thread::worker::Shared

source ·
pub(crate) struct Shared {
    remotes: Box<[Remote]>,
    pub(super) inject: Shared<Arc<Handle>>,
    idle: Idle,
    pub(crate) owned: OwnedTasks<Arc<Handle>>,
    pub(super) synced: Mutex<Synced>,
    shutdown_cores: Mutex<Vec<Box<Core>>>,
    pub(super) trace_status: TraceStatus,
    config: Config,
    pub(super) scheduler_metrics: SchedulerMetrics,
    pub(super) worker_metrics: Box<[WorkerMetrics]>,
    _counters: Counters,
}
Expand description

State shared across all workers

Fields§

§remotes: Box<[Remote]>

Per-worker remote state. All other workers have access to this and is how they communicate between each other.

§inject: Shared<Arc<Handle>>

Global task queue used for:

  1. Submit work to the scheduler while not currently on a worker thread.
  2. Submit work to the scheduler when a worker run queue is saturated
§idle: Idle

Coordinates idle workers

§owned: OwnedTasks<Arc<Handle>>

Collection of all active tasks spawned onto this executor.

§synced: Mutex<Synced>

Data synchronized by the scheduler mutex

§shutdown_cores: Mutex<Vec<Box<Core>>>

Cores that have observed the shutdown signal

The core is not placed back in the worker to avoid it from being stolen by a thread that was spawned as part of block_in_place.

§trace_status: TraceStatus

The number of cores that have observed the trace signal.

§config: Config

Scheduler configuration options

§scheduler_metrics: SchedulerMetrics

Collects metrics from the runtime.

§worker_metrics: Box<[WorkerMetrics]>§_counters: Counters

Only held to trigger some code on drop. This is used to get internal runtime metrics that can be useful when doing performance investigations. This does nothing (empty struct, no drop impl) unless the tokio_internal_mt_counters cfg flag is set.

Implementations§

Auto Trait Implementations§

§

impl !Freeze for Shared

§

impl !RefUnwindSafe for Shared

§

impl Send for Shared

§

impl Sync for Shared

§

impl Unpin for Shared

§

impl !UnwindSafe for Shared

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.