asdf2014 commented on a change in pull request #5913: Move Caching Cluster 
Client to java streams and allow parallel intermediate merges
URL: https://github.com/apache/incubator-druid/pull/5913#discussion_r201538838
 
 

 ##########
 File path: 
java-util/src/main/java/io/druid/java/util/common/concurrent/Execs.java
 ##########
 @@ -147,4 +151,29 @@ public void rejectedExecution(Runnable r, 
ThreadPoolExecutor executor)
         }
     );
   }
+
+  private static final AtomicLong fjpWorkerThreadCount = new AtomicLong(0L);
 
 Review comment:
   Using `LongAdder` will be better than `AtomicLong`. There is a source-level 
analysis in my personal blog, if you are interested, you can take a look.
   
   Tips: 
[https://yuzhouwan.com/posts/31915#LongAdder](https://yuzhouwan.com/posts/31915#LongAdder)
   
   ```java
   // -Xmx512M -Xms512M -Xmn256M -XX:+AlwaysPreTouch -ea
   @Test
   public void pressureLongAdder() throws Exception {
       final LongAdder longAdder = new LongAdder();
       ExecutorService executorService = Executors.newCachedThreadPool();
       long startTime = System.currentTimeMillis();
       for (int i = 0; i < 100; i++) {
           executorService.submit(new Thread(() -> {
               for (int j = 0; j < 1000_0000; j++) {
                   longAdder.increment();
               }
               System.out.print(String.format("%s %s \t", 
Thread.currentThread().getId(), longAdder.longValue()));
               /*
               14 19607585      12 36445036     20 38985288     38 76821270     
70 117094732    18 127252576
               22 137043349     26 153411172    30 164051380    34 165971155    
102 192241678   134 201104979
               158 232657818    46 279030056    174 288502545   94 347965290    
198 348060553   118 348087414
               36 353092712     28 357762215    44 365464475    126 379518198   
54 379623515    182 380077075
               142 385263911    78 389013887    62 389085727    110 389122678   
86 389920423    166 393535019
               150 396382512    190 403100499   32 403161217    208 403197689   
206 406065520   16 410725026
               24 415347205     40 415379997    48 415733397    104 418507295   
192 423244160   176 455793362
               168 458311865    160 463028656   136 496375440   72 541243645    
186 561877000   170 575352229
               162 584152392    154 604552121   138 614092854   64 638151890    
114 668705836   58 669235250
               188 699213410    156 729222401   124 754336889   100 784326386   
76 813479501    120 827569944
               66 830236567     98 832153503    112 841408676   204 849520891   
210 852391130   202 864804732
               172 875603834    194 877222893   200 881090909   88 882809513    
80 882846368    56 887174571
               178 889682247    140 901357028   146 902169049   184 904540678   
152 915608988   130 917896629
               116 924616135    144 927674541   122 930399321   128 939791111   
106 942656234   84 950848174
               96 951904067     90 954910184    74 964338213    196 966487766   
82 968307139    52 975854400
               180 977385398    164 978882525   50 980896807    148 988292352   
132 989090669   108 996891232
               92 996921398     42 996938988    68 996953941    60 1000000000
                */
           }));
       }
       executorService.shutdown();
       while (!executorService.isTerminated()) {
           Thread.sleep(1);
       }
       long endTime = System.currentTimeMillis();
       System.out.println("\n" + (endTime - startTime));    // 3275 ms
   }
   // -Xmx512M -Xms512M -Xmn128M -XX:+AlwaysPreTouch -ea
   @Test
   public void pressureAtomicLong() throws Exception {
       final AtomicLong atomicLong = new AtomicLong();
       ExecutorService executorService = Executors.newCachedThreadPool();
       long startTime = System.currentTimeMillis();
       for (int i = 0; i < 100; i++) {
           executorService.submit(new Thread(() -> {
               for (int j = 0; j < 1000_0000; j++) {
                   atomicLong.getAndIncrement();
               }
               System.out.print(String.format("%s %s \t", 
Thread.currentThread().getId(), atomicLong.longValue()));
               /*
               12 390000000     28 390000000    44 390000000    20 390000000    
26 390000000    18 390000000
               80 390000000     56 390000000    96 390000000    24 390000000    
88 390000000    72 390000000
               22 390000000     118 390000000   54 390000000    142 390000000   
70 390000000    86 390000000
               182 390000000    110 390000000   62 390000000    78 390000000    
102 390000000   158 390000000
               150 390000000    46 390000000    38 390000000    126 390000000   
94 390000000    134 390000000
               14 390000000     48 390000000    40 390000000    32 390000000    
34 390000000    64 390000000
               42 390000000     36 390000000    16 390000000    180 416396554   
204 419908287   196 425536497
               92 732203658     30 733835560    202 733835559   210 733873571   
146 733878564   186 733883527
               170 733888686    76 733892691    84 733888815    148 733901560   
162 733907032   172 733908079
               52 733913280     116 733918421   124 733906868   164 733920945   
132 733891348   68 733923672
               108 733924928    156 733926091   60 733921998    140 733927257   
188 733928891   154 733871822
               194 733830477    178 733872527   100 733830322   106 748251688   
144 1000000000  98 1000000000
               58 1000000000    90 1000000000   130 1000000000  138 1000000000  
114 1000000000  104 1000000000
               168 1000000000   200 1000000000  184 1000000000  160 1000000000  
174 1000000000  112 1000000000
               190 1000000000   198 1000000000  82 1000000000   206 1000000000  
166 1000000000  176 1000000000
               136 1000000000   208 1000000000  74 1000000000   122 1000000000  
152 1000000000  192 1000000000
               120 1000000000   128 1000000000  66 1000000000   50 1000000000
                */
           }));
       }
       executorService.shutdown();
       while (!executorService.isTerminated()) {
           Thread.sleep(1);
       }
       long endTime = System.currentTimeMillis();
       System.out.println("\n" + (endTime - startTime));    // 19409 ms
   }
   ```

----------------------------------------------------------------
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:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to