pub struct Instant(/* private fields */);Expand description
A measurement of a monotonically nondecreasing clock.
Opaque and useful only with Duration.
Instants are guaranteed to be no less than any previously measured instant when created, and are often useful for tasks such as measuring benchmarks or timing how long an operation takes.
Note, however, that instants are not guaranteed to be steady. In other words, each tick of the underlying clock might not be the same length (e.g. some seconds may be longer than others). An instant may jump forwards or experience time dilation (slow down or speed up), but it will never go backwards.
Instants should generally be condsidered as opaque types that can only be compared to one another.
Though there is a method to get “the number of seconds” from an instant it is implementation dependent
and should be used with knowledge of how this particular Instant was constructed.
Instead, prefer using other operations, such as measuring the duration between two instants, comparing two
instants, adding and subtracting Duration.
This struct is almost identical to std::time::Instant but provides
some additional saturating methods. And it can also be constructed with
fiber::clock, in which case it behaves in a tarantool specific way.
Implementations§
source§impl Instant
impl Instant
sourcepub fn now() -> Self
👎Deprecated: use now_fiber or now_accurate instead
pub fn now() -> Self
now_fiber or now_accurate insteadEquivalent to Self::now_accurate.
sourcepub fn now_accurate() -> Self
pub fn now_accurate() -> Self
Returns an instant corresponding to “now”. Uses monotonic clock.
Use this function when duration accuracy is required, for example when timing the execution of different parts of your program (benchmarking).
If you need to compute timeouts for yielding operations you should use
Self::now_fiber instead.
§Examples
use tarantool::time::Instant;
let start = Instant::now_accurate();
expensive_computation();
println!("expensive_computation took {:?}", start.elapsed());sourcepub fn now_fiber() -> Self
pub fn now_fiber() -> Self
Returns an instant corresponding to event loop iteration begin time. Uses monotonic clock.
Use this function when computing timeouts for tasks which may result in
fiber yields. It is important that this function is used, because the
tarantool uses this value for it’s internal event loop timers, and using
Self::now_accurate may result in unexpected results.
If instead you’re timing how long things execute, use Self::now_accurate.
§Examples
use tarantool::time::Instant;
use std::time::Duration;
let timeout = Duration::from_secs(3);
let deadline = Instant::now_fiber().saturating_add(timeout);
while Instant::now_fiber() < deadline {
do_some_yielding_task();
}sourcepub fn elapsed(&self) -> Duration
pub fn elapsed(&self) -> Duration
Returns the amount of time elapsed since this instant was created.
Uses Self::now_accurate to determine the instant of “now”.
§Examples
use std::time::Duration;
use tarantool::time::Instant;
use tarantool::fiber;
let instant = Instant::now_accurate();
let three_secs = Duration::from_secs(3);
fiber::sleep(three_secs);
assert!(instant.elapsed() >= three_secs);sourcepub fn checked_add(&self, duration: Duration) -> Option<Instant>
pub fn checked_add(&self, duration: Duration) -> Option<Instant>
Returns Some(t) where t is the time self + duration if t can be represented as
Instant (which means it’s inside the bounds of the underlying representation), None
otherwise.
sourcepub fn checked_sub(&self, duration: Duration) -> Option<Instant>
pub fn checked_sub(&self, duration: Duration) -> Option<Instant>
Returns Some(t) where t is the time self - duration if t can be represented as
Instant (which means it’s inside the bounds of the underlying representation), None
otherwise.
sourcepub fn saturating_add(&self, duration: Duration) -> Instant
pub fn saturating_add(&self, duration: Duration) -> Instant
Saturating addition. Computes self + duration, returning maximal possible
instant (allowed by the underlying representaion) if overflow occurred.
sourcepub fn saturating_sub(&self, duration: Duration) -> Instant
pub fn saturating_sub(&self, duration: Duration) -> Instant
Saturating subtraction. Computes self - duration, returning minimal possible
instant (allowed by the underlying representaion) if overflow occurred.
sourcepub fn checked_duration_since(&self, earlier: Instant) -> Option<Duration>
pub fn checked_duration_since(&self, earlier: Instant) -> Option<Duration>
Returns the amount of time elapsed from another instant to this one, or None if that instant is later than this one.
§Examples
use std::time::Duration;
use std::thread::sleep;
use tarantool::time::Instant;
let now = Instant::now();
sleep(Duration::new(1, 0));
let new_now = Instant::now();
println!("{:?}", new_now.checked_duration_since(now));
println!("{:?}", now.checked_duration_since(new_now)); // Nonesourcepub fn duration_since(&self, earlier: Instant) -> Duration
pub fn duration_since(&self, earlier: Instant) -> Duration
Returns the amount of time elapsed from another instant to this one, or zero duration if that instant is later than this one.
§Examples
use std::time::Duration;
use std::thread::sleep;
use tarantool::time::Instant;
let now = Instant::now();
sleep(Duration::new(1, 0));
let new_now = Instant::now();
println!("{:?}", new_now.duration_since(now));
println!("{:?}", now.duration_since(new_now)); // 0nssourcepub fn as_secs(&self) -> u64
pub fn as_secs(&self) -> u64
Get the inner representation of an Instant.
§Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant was constructed.
If possible prefer working with Instant and Duration directly without
getting its inner representation.
sourcepub fn as_secs_f64(&self) -> f64
pub fn as_secs_f64(&self) -> f64
Get the inner representation of an Instant.
§Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant was constructed.
If possible prefer working with Instant and Duration directly without
getting its inner representation.
sourcepub fn as_secs_f32(&self) -> f32
pub fn as_secs_f32(&self) -> f32
Get the inner representation of an Instant.
§Warning
The inner representation of an instant is implementation dependent
and should be used with knowledge of how this particular Instant was constructed.
If possible prefer working with Instant and Duration directly without
getting its inner representation.
Trait Implementations§
source§impl AddAssign<Duration> for Instant
impl AddAssign<Duration> for Instant
source§fn add_assign(&mut self, other: Duration)
fn add_assign(&mut self, other: Duration)
+= operation. Read moresource§impl Ord for Instant
impl Ord for Instant
source§impl PartialOrd for Instant
impl PartialOrd for Instant
source§impl SubAssign<Duration> for Instant
impl SubAssign<Duration> for Instant
source§fn sub_assign(&mut self, other: Duration)
fn sub_assign(&mut self, other: Duration)
-= operation. Read moreimpl Copy for Instant
impl Eq for Instant
impl StructuralPartialEq for Instant
Auto Trait Implementations§
impl Freeze for Instant
impl RefUnwindSafe for Instant
impl Send for Instant
impl Sync for Instant
impl Unpin for Instant
impl UnwindSafe for Instant
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)