You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2018/09/05 03:55:13 UTC
[GitHub] lexburner opened a new issue #2444: [Enhancement] Replace Random
with ThreadLocalRandom
lexburner opened a new issue #2444: [Enhancement] Replace Random with ThreadLocalRandom
URL: https://github.com/apache/incubator-dubbo/issues/2444
### Details
A little change, replace `Random` with `ThreadLocalRandom` .
Use of ThreadLocalRandom rather than shared Random objects in concurrent programs will typically encounter much less overhead and contention.
Use of ThreadLocalRandom is particularly appropriate when multiple tasks .
### Benchmark
There are some attentions need to be noticed before benchmark.
1. third-party dependency need use carefully.
2. bugs fix need to trace from upstream repository.
3. performance benchmark
I have compared the three cases : `Random`,`ThreadLocalRandom` from JDK, `ThreadLocalRandom` from netty.
```
@BenchmarkMode({Mode.AverageTime})
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 3, time = 5)
@Measurement(iterations = 3, time = 5)
@Threads(50)
@Fork(1)
@State(Scope.Benchmark)
public class RandomBenchmark {
Random random = new Random();
@Benchmark
public int random() {
return random.nextInt();
}
@Benchmark
public int threadLocalRandom() {
return ThreadLocalRandom.current().nextInt();
}
@Benchmark
public int nettyThreadLocalRandom() {
return io.netty.util.internal.ThreadLocalRandom.current().nextInt();
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(RandomBenchmark.class.getSimpleName())
.build();
new Runner(opt).run();
}
}
```
and below is our benchmark result under 50 concurrency
```
Benchmark Mode Cnt Score Error Units
RandomBenchmark.nettyThreadLocalRandom avgt 3 160.321 ± 83.518 ns/op
RandomBenchmark.random avgt 3 3281.972 ± 2093.187 ns/op
RandomBenchmark.threadLocalRandom avgt 3 91.505 ± 39.702 ns/op
```
From the result we can know the truth
> Both the performance (according to above benchmark) and the stability(it is from the JDK)
> JDK 's ThreadLocalRandom looks good.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org