Hi,
Good job!

There is a similar pr here (using the netty version, copy code):
https://github.com/apache/incubator-dubbo/pull/2439

I saw that you submitted a test example about performance. I think it is
more recommended to use the jdk version if the gap is not large, so I
closed the duplicate one.

If there are other considerations, re-open this duplicate one.

Best regards!

徐靖峰 <[email protected]> 于2018年9月5日周三 下午12:17写道:

> 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