#[non_exhaustive]pub enum LoadBalancing {
RoundRobin,
LeastLoaded,
IncomingCpu,
}Expand description
How the server distributes items between workers.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
RoundRobin
Items are sent to the workers in turn.
Workers whose runtime is blocked by a task are skipped while another worker is available.
LeastLoaded
Each item is sent to the less loaded of two randomly chosen workers.
A worker’s load is its runtime utilization, averaged over the last ~250 ms and not counting the time the runtime is blocked by a task. Workers whose utilization differs by less than 10% are compared by their open connections plus queued items. Workers whose runtime is blocked by a task are skipped while another worker is available.
IncomingCpu
Each connection is sent to the worker placed on the CPU that receives its network packets, unless that worker is busier than other workers.
The worker on the incoming CPU, or on an SMT sibling of it if no worker
is placed on that CPU, is used if its utilization exceeds the
LeastLoaded choice by at most 20% and its load by
at most half plus 16. Otherwise, and for items without a known
incoming CPU, it works like LeastLoaded.
The incoming CPU is the receive-side scaling (RSS) CPU of the
connection on Windows, known for connections over network adapters
with RSS, and the CPU that processed the connection’s last packet
(SO_INCOMING_CPU) on Linux and Android. Requires worker affinity, see
Affinity.
This is the default.
Trait Implementations§
Source§impl Clone for LoadBalancing
impl Clone for LoadBalancing
impl Copy for LoadBalancing
Source§impl Debug for LoadBalancing
impl Debug for LoadBalancing
Source§impl Default for LoadBalancing
impl Default for LoadBalancing
impl Eq for LoadBalancing
Source§impl Hash for LoadBalancing
impl Hash for LoadBalancing
Source§impl PartialEq for LoadBalancing
impl PartialEq for LoadBalancing
impl StructuralPartialEq for LoadBalancing
Auto Trait Implementations§
impl Forget for LoadBalancing
impl Freeze for LoadBalancing
impl Move for LoadBalancing
impl RefUnwindSafe for LoadBalancing
impl Send for LoadBalancing
impl Sync for LoadBalancing
impl Unpin for LoadBalancing
impl UnsafeUnpin for LoadBalancing
impl UnwindSafe for LoadBalancing
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.