LilMosey
LilMosey
> 我理解这边主要讨论了 chainMap 使用 HashMap 还是 ConcurrentHashMap 的问题。首先我们明确下使用的场景,chainMap 的使用场景主要分成两个阶段,一个是初始化阶段,一个是运行阶段。在初始化阶段中,相较于性能,我们会更关注准确性,包括对于数量的控制等;在运行阶段,则更关注性能。 回到这个问题,我用 Benchmark 跑了一下性能测试,在较高强度下,只考虑 get 操作,HashMap 相较于 ConcurrentHashMap 还是表现出了一定的优势。考虑到前面提到的使用场景,虽然初始化阶段的性能表现会略差于 ConcurrentHashMap,当前可能还是保持使用 HashMap 以获取更高运行阶段的性能更合适。 在确定了这个结论后,再看下关于更新 map 的方式,由于使用的是 HashMap,并发的读写操作存在风险,所以采用了现在这种方式。 个人的一些想法,欢迎继续讨论。 我的表达可能不清晰,我的意思是在 lookProcessChain 方法的初始化过程中,即使chainMap使用hashMap,也不需要使用 copyOnWrite 来频繁拷贝...
> lookProcessChain 方法中的第一个 get 操作不在 synchronized 的范围内哈,还是会存在并发 get 和 put 的情况 是的,第一个get操作不在synchronized范围内,但是他做了一层double check。后面synchronized代码块中没有必要对chainMap进行copyOnWrite的操作。
> > > lookProcessChain 方法中的第一个 get 操作不在 synchronized 的范围内哈,还是会存在并发 get 和 put 的情况 > > > > > > 是的,第一个get操作不在synchronized范围内,但是他做了一层double check。后面synchronized代码块中没有必要对chainMap进行copyOnWrite的操作。 > > 有道理,即便有 resize 导致的脏读也是读到 null ,在有 double check...
> > > lookProcessChain 方法中的第一个 get 操作不在 synchronized 的范围内哈,还是会存在并发 get 和 put 的情况 > > > > > > 是的,第一个get操作不在synchronized范围内,但是他做了一层double check。后面synchronized代码块中没有必要对chainMap进行copyOnWrite的操作。 > > 有道理,即便有 resize 导致的脏读也是读到 null ,在有 double check...
+1, I’m also curious. The documentation suggests using the **master** branch as the base for development, but most PRs are being merged into **1.8**.
> Hello, I'm very interested in this project and also a user. Currently, I only know how to use it, but I want to contribute something to the community. Can...