并发主题

针对多核可扩展的计数器

  针对多核可扩展的计数器源码下载

并发计数器有下面几种实现:

  • 同步Synchronized – 只能在 JDK 1.5之前使用, 等待JDK8 期间,不选择这个选项。
  • 基于锁Lock based  -非常差
  • 等待免费Wait Free – Java 不支持 Fetch-and-add,
  • 锁免费Lock free – Java支持 Compare-and-swap, 使用这个选项。

测试结果:

CAS 失败 率

结论:

  • 为了降低竞争,用多个计数器然后聚合。
  • Core based counter 在核数较少时很好。
  • Thread based counter 当线程数比可用CPU核数多得多时很好
  • Thread based 使用了JDK8的 LongAdder , 能创建很多slots降低竞争。