[concurrency-interest] delaying in the nanosecond range

Doug Lea dl at cs.oswego.edu
Mon May 31 14:13:23 EDT 2010


On 05/31/10 13:42, Peter Veentjer wrote:
> Is there any way other than performing some arbitrary calculation (like
> calculating pi) to enter 0..1000 ns delay range?

The best other way is figure out something actually useful to do,
and do it! This is always worth exploring.

>
> I'm working on an STM and I'm including support for a bug shaker by
> inserting delays (delays are removed by the JIT if not enabled)
> at strategic positions. A park nanos leads to at least a few thousand
> nanoseconds delay and this causes new problems,
> like transactions not being able to complete because there always is
> some conflict.
>

Yes. Whenever there are no productive alternatives,
several j.u.c internals skip timed park calls below
a threshold (1-10 microsecs is reasonable) and instead spin more
on volatiles indicating completion, mixed with occasional
calls to Thread.yield, to heuristically nudge OS/VM to
try doing something else if it knows of anything.
See for example Exchanger.
http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/Exchanger.java?view=log

-Doug


More information about the Concurrency-interest mailing list