Skip to main content

ThreadContext

Struct ThreadContext 

Source
pub struct ThreadContext { /* private fields */ }
Expand description

ThreadContext maintains the long-lived, persistent contention state of a specific thread as it interacts with a specific cache instance.

Unlike a request-scoped budget (quota), ThreadContext acts as the “Thread Memory.” It tracks historical contention via Backoff, allowing the thread to adapt its timing based on how “hot” the cache has been in recent operations.

§Safety and Thread Locality

This struct is explicitly !Send and !Sync.

It uses UnsafeCell to provide interior mutability with zero runtime overhead. This is only safe when the context is stored in a way that guarantees exclusive access by a single thread (e.g., inside a ThreadLocal ). The non-thread-safe markers ensure this state cannot accidentally leak or be shared across thread boundaries.

Implementations§

Source§

impl ThreadContext

Source

pub fn new(backoff: Backoff) -> Self

Creates a new ThreadContext with the provided backoff policy.

Usually initialized lazily when a thread first interacts with a cache instance.

Source

pub fn wait(&self)

Signals hardware-level contention and triggers a thread yield.

This should be called when an atomic operation (like a CAS) fails. It increases the internal frustration level and performs a hardware-friendly stall (e.g., spin_loop or yield) based on the persistent backoff state.

Source

pub fn decay(&self)

Signals a successful operation, allowing the thread-local “heat” to dissipate.

This should be called after a successful operation. It decays the persistent frustration level, ensuring that subsequent calls from this thread are not unnecessarily throttled.

Trait Implementations§

Source§

impl Default for ThreadContext

Source§

fn default() -> Self

Returns the “default value” for a type. 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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V