Enum timely::worker::ProgressMode
source · pub enum ProgressMode {
Eager,
Demand,
}
Expand description
Different ways in which timely’s progress tracking can work.
These options drive some buffering and accumulation that timely can do to try and trade volume of progress traffic against latency. By accumulating updates longer, a smaller total volume of messages are sent.
The ProgressMode::Demand
variant is the most robust, and least
likely to lead to catastrophic performance. The Eager
variant
is useful for getting the smallest latencies on systems with few
workers, but does risk saturating the system with progress messages
and should be used with care, or not at all.
If you are not certain which option to use, prefer Demand
, and
perhaps monitor the progress messages through timely’s logging
infrastructure to see if their volume is surprisingly high.
Variants§
Eager
Eagerly transmit all progress updates produced by a worker.
Progress messages are transmitted without consideration for the possibility that they may unblock other workers. This can result in a substantial volume of messages that do not result in a change to the lower bound of outstanding work.
Demand
Delay transmission of progress updates until any could advance the global frontier of timestamps.
As timely executes, the progress messages inform each worker of the outstanding work remaining in the system. As workers work, they produce changes to this outstanding work. This option delays the communication of those changes until they might possibly cause a change in the lower bound of all outstanding work.
The most common case this remedies is when one worker transmits messages to other workers, that worker holds a capability for the operator and timestamp. Other workers will receive messages, and with this option will not immediately acknowledge receiving the messages, because the held capability is strictly prior to what the messages can affect. Once the capability is released, the progress messages are unblocked and transmitted, in accumulated form.
Trait Implementations§
source§impl Clone for ProgressMode
impl Clone for ProgressMode
source§fn clone(&self) -> ProgressMode
fn clone(&self) -> ProgressMode
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ProgressMode
impl Debug for ProgressMode
source§impl Default for ProgressMode
impl Default for ProgressMode
source§fn default() -> ProgressMode
fn default() -> ProgressMode
source§impl FromStr for ProgressMode
impl FromStr for ProgressMode
source§impl PartialEq for ProgressMode
impl PartialEq for ProgressMode
impl Copy for ProgressMode
impl Eq for ProgressMode
impl StructuralPartialEq for ProgressMode
Auto Trait Implementations§
impl Freeze for ProgressMode
impl RefUnwindSafe for ProgressMode
impl Send for ProgressMode
impl Sync for ProgressMode
impl Unpin for ProgressMode
impl UnwindSafe for ProgressMode
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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.