rehash机制探索LongAderlongAcumulate方法
在LongAder类longAcumulate方法中,rehash操作的时机引起了疑问:在某些情况下,即使不是绝对必要的,也会执行。例如,当cells数组是空的,没有锁定时,如果最后一个元素是空的,它不会直接扩展cells数组,而是进行rehash操作。
代码片段如下:
if ((a = as[(n - 1) & h]) == null) { if (cellsBusy == 0) {} // 这里的rehash似乎不必要 collide = false; }
当cells数组的最后一个元素是空的时候,表面上没有并发竞争。此时,直接重试CAS操作似乎更有效率,而不是执行rehash。
然而,rehash操作的意义在于,即使目前没有竞争,也不能保证未来不会有竞争。为了避免热门竞争和潜在的死锁,rehash可以将操作分散到不同的cells单元上。通过重新哈希,longacumulate可以找到冲突概率较低的新位置,从而提高并发性能。 这是一种以牺牲少量计算费用换取更高并发效率和稳定性的预防性优化策略。
以上是longAdderlongAccumulate方法:rehash操作何时必要?详情请关注图灵教育其他相关文章!
