[infinispan-dev] [Discussion] TimeService implementation
Galder Zamarreño
galder at redhat.com
Thu May 2 08:44:25 EDT 2013
On May 1, 2013, at 5:04 PM, Sanne Grinovero <sanne at infinispan.org> wrote:
> On 29 April 2013 18:04, Pedro Ruivo <pedro at infinispan.org> wrote:
>>
>> On 04/29/2013 05:53 PM, Mircea Markus wrote:
>>>
>>> On 29 Apr 2013, at 17:34, Pedro Ruivo wrote:
>>>
>>>> Hi,
>>>>
>>>> The TimeService interface is going to replace all the System.nanoTime()
>>>> and System.currentTimeMillis() in the code and it will allow to replace
>>>> in the test suite in order to provide a better control over the time
>>>> dependent code (if needed).
>>>>
>>>> The objective of this email is to discuss possible implementation and
>>>> interface that will cover the needs of everybody (or at least try it).
>>>> Later I'll create a JIRA and start the implementation (except if someone
>>>> really wants to implement it :P)
>>>>
>>>> * Interface:
>>>>
>>>> //return the current time in nanoseconds and milliseconds respectively
>>>> long nowNanos()
>>>> long nowMillis()
>>> What about time() and wallClockTime() with overloaded methods time(TimeUnit) and wallClockTime(TimeUnit)?
>>
>> what is the semantic of wallClockTime()? I'm assuming that time()
>> returns the current time in nanoseconds...
>
> There are at least two ways to use a Clock service, as there are
> different methods to get the "time" and different concepts of "time"
> depending on what your purpose is.
>
> For example you should never use two invocations of
> System.currentTimeMillis() to measure time intervals; it's generally
> less accurate but also it is affected by system clock changes, while
> nanoTime() is not. The underlying system calls are different, and
> depending on the platform the precision guarantees are different and
> in some cases the different precision guarantee has a significant
> impact on runtime performance of the invocation, for example not all
> can be JIT optimized.
>
> Most of the time we want to use nanoTime(), for example for metrics,
> but its precision is valid only in the scope of the machine it's
> executed on, so this value is meaningless for something which needs to
> be shared with other nodes.. complex, and we might want to switch
> implementation for certain use cases depending on the cluster mode.
^ Can you explain further why you'd want a different implementation depending on the cluster mode?
>
> In other words: the method invoker needs to make it very clear what
> its goal is, what it wants to do with the requested "long" as it's not
> just a simple universally valid primitive.
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Galder Zamarreño
galder at redhat.com
twitter.com/galderz
Project Lead, Escalante
http://escalante.io
Engineer, Infinispan
http://infinispan.org
More information about the infinispan-dev
mailing list