Hi community,
i changed the random implementation  for dubbo, you can see as below.

Details

This issue links to this pull request 
(https://github.com/apache/incubator-dubbo/pull/2433)

A little change, replace Random with ThreadLocalRandom in 
LeastActiveLoadBalance and RandomLoadBalance.

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.

third-party dependency need use carefully.

bugs fix need to trace from upstream repository.

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.

Reply via email to