Clock
@implicitNotFound("Cannot find an implicit value for Clock[${F}]:\n* import an implicit Timer[${F}] in scope or\n* create a Clock[${F}] instance with Clock.create\n") trait Clock[F <: ([_$1] =>> Any)]
Clock provides the current time, as a pure alternative to:
-
Java's
System.currentTimeMillis
for getting the "real-time clock" and
System.nanoTime
for a monotonic clock useful for time measurements -
JavaScript's
Date.now()
andperformance.now()
This is NOT a type class, as it does not have the coherence
requirement.
requirement.
- Companion
- object
class Object
trait Matchable
class Any
Value members
Methods
Implicitly added by deriveKleisli
Returns the current time, as a Unix timestamp (number of time units
since the Unix epoch), suspended in
since the Unix epoch), suspended in
F[_]
.This is the pure equivalent of Java's
or of
System.currentTimeMillis
,or of
CLOCK_REALTIME
from Linux's clock_gettime()
.The provided
its precision, but not necessarily its resolution, which is
implementation dependent. For example this will return the number
of milliseconds since the epoch:
TimeUnit
determines the time unit of the output,its precision, but not necessarily its resolution, which is
implementation dependent. For example this will return the number
of milliseconds since the epoch:
{{{
import scala.concurrent.duration.MILLISECONDS
import scala.concurrent.duration.MILLISECONDS
clock.realTime(MILLISECONDS)
}}}
}}}
N.B. the resolution is limited by the underlying implementation
and by the underlying CPU and OS. If the implementation uses
resolution than 1 millisecond, plus depending on underlying
runtime (e.g. Node.js) it might return multiples of 10
milliseconds or more.
and by the underlying CPU and OS. If the implementation uses
System.currentTimeMillis
, then it can't have a betterresolution than 1 millisecond, plus depending on underlying
runtime (e.g. Node.js) it might return multiples of 10
milliseconds or more.
See monotonic, for fetching a monotonic value that
may be better suited for doing time measurements.
may be better suited for doing time measurements.
Implicitly added by deriveKleisli
Returns a monotonic clock measurement, if supported by the
underlying platform.
underlying platform.
This is the pure equivalent of Java's
or of
System.nanoTime
,or of
CLOCK_MONOTONIC
from Linux's clock_gettime()
.{{{
clock.monotonic(NANOSECONDS)
}}}
clock.monotonic(NANOSECONDS)
}}}
The returned value can have nanoseconds resolution and represents
the number of time units elapsed since some fixed but arbitrary
origin time. Usually this is the Unix epoch, but that's not
a guarantee, as due to the limits of
the future (2^63^ is about 292 years in nanoseconds) and the
implementation reserves the right to change the origin.
the number of time units elapsed since some fixed but arbitrary
origin time. Usually this is the Unix epoch, but that's not
a guarantee, as due to the limits of
Long
this will overflow inthe future (2^63^ is about 292 years in nanoseconds) and the
implementation reserves the right to change the origin.
The return value should not be considered related to wall-clock
time, the primary use-case being to take time measurements and
compute differences between such values, for example in order to
measure the time it took to execute a task.
time, the primary use-case being to take time measurements and
compute differences between such values, for example in order to
measure the time it took to execute a task.
As a matter of implementation detail, the default
implementation uses
(see
platform to implement it correctly.
Clock[IO]
implementation uses
System.nanoTime
and the JVM will useCLOCK_MONOTONIC
when available, instead of CLOCK_REALTIME
(see
clock_gettime()
on Linux) and it is up to the underlyingplatform to implement it correctly.
And be warned, there are platforms that don't have a correct
implementation of
writing there is no standard way for such a clock on top of
JavaScript and the situation isn't so clear cut for the JVM
either, see:
implementation of
CLOCK_MONOTONIC
. For example at the moment ofwriting there is no standard way for such a clock on top of
JavaScript and the situation isn't so clear cut for the JVM
either, see:
-
concurrency-interest
discussion on the X86 tsc register
The JVM tries to do the right thing and at worst the resolution
and behavior will be that of
and behavior will be that of
System.currentTimeMillis
.The recommendation is to use this monotonic clock when doing
measurements of execution time, or if you value monotonically
increasing values more than a correspondence to wall-time, or
otherwise prefer realTime.
measurements of execution time, or if you value monotonically
increasing values more than a correspondence to wall-time, or
otherwise prefer realTime.
Returns the current time, as a Unix timestamp (number of time units
since the Unix epoch), suspended in
since the Unix epoch), suspended in
F[_]
.This is the pure equivalent of Java's
or of
System.currentTimeMillis
,or of
CLOCK_REALTIME
from Linux's clock_gettime()
.The provided
its precision, but not necessarily its resolution, which is
implementation dependent. For example this will return the number
of milliseconds since the epoch:
TimeUnit
determines the time unit of the output,its precision, but not necessarily its resolution, which is
implementation dependent. For example this will return the number
of milliseconds since the epoch:
{{{
import scala.concurrent.duration.MILLISECONDS
import scala.concurrent.duration.MILLISECONDS
clock.realTime(MILLISECONDS)
}}}
}}}
N.B. the resolution is limited by the underlying implementation
and by the underlying CPU and OS. If the implementation uses
resolution than 1 millisecond, plus depending on underlying
runtime (e.g. Node.js) it might return multiples of 10
milliseconds or more.
and by the underlying CPU and OS. If the implementation uses
System.currentTimeMillis
, then it can't have a betterresolution than 1 millisecond, plus depending on underlying
runtime (e.g. Node.js) it might return multiples of 10
milliseconds or more.
See monotonic, for fetching a monotonic value that
may be better suited for doing time measurements.
may be better suited for doing time measurements.
Returns a monotonic clock measurement, if supported by the
underlying platform.
underlying platform.
This is the pure equivalent of Java's
or of
System.nanoTime
,or of
CLOCK_MONOTONIC
from Linux's clock_gettime()
.{{{
clock.monotonic(NANOSECONDS)
}}}
clock.monotonic(NANOSECONDS)
}}}
The returned value can have nanoseconds resolution and represents
the number of time units elapsed since some fixed but arbitrary
origin time. Usually this is the Unix epoch, but that's not
a guarantee, as due to the limits of
the future (2^63^ is about 292 years in nanoseconds) and the
implementation reserves the right to change the origin.
the number of time units elapsed since some fixed but arbitrary
origin time. Usually this is the Unix epoch, but that's not
a guarantee, as due to the limits of
Long
this will overflow inthe future (2^63^ is about 292 years in nanoseconds) and the
implementation reserves the right to change the origin.
The return value should not be considered related to wall-clock
time, the primary use-case being to take time measurements and
compute differences between such values, for example in order to
measure the time it took to execute a task.
time, the primary use-case being to take time measurements and
compute differences between such values, for example in order to
measure the time it took to execute a task.
As a matter of implementation detail, the default
implementation uses
(see
platform to implement it correctly.
Clock[IO]
implementation uses
System.nanoTime
and the JVM will useCLOCK_MONOTONIC
when available, instead of CLOCK_REALTIME
(see
clock_gettime()
on Linux) and it is up to the underlyingplatform to implement it correctly.
And be warned, there are platforms that don't have a correct
implementation of
writing there is no standard way for such a clock on top of
JavaScript and the situation isn't so clear cut for the JVM
either, see:
implementation of
CLOCK_MONOTONIC
. For example at the moment ofwriting there is no standard way for such a clock on top of
JavaScript and the situation isn't so clear cut for the JVM
either, see:
-
concurrency-interest
discussion on the X86 tsc register
The JVM tries to do the right thing and at worst the resolution
and behavior will be that of
and behavior will be that of
System.currentTimeMillis
.The recommendation is to use this monotonic clock when doing
measurements of execution time, or if you value monotonically
increasing values more than a correspondence to wall-time, or
otherwise prefer realTime.
measurements of execution time, or if you value monotonically
increasing values more than a correspondence to wall-time, or
otherwise prefer realTime.