我有一张经常阅读但很少写入的地图。有些操作(可以是读或写)涉及多个需要原子操作的对象,所以我使用了 ReadWriteLock 来提高性能。
现在我可以选择将并发映射降级为普通哈希映射,但我担心一些缓慢的迭代代码。
如果我降级地图,长迭代器必须持有读锁以避免并发访问异常。我认为这会阻塞写入线程太久。
由于一些迭代器对不一致的数据不敏感,我可以保留并发映射,以便迭代器可以与并发写入一起使用。但是,这会为正确使用锁的操作增加不必要的开销(来自并发映射)。
或者,我可以实现类似 Read-on-write 映射,其中克隆整个(非并发)映射以进行写入操作,以便现有迭代器继续在读锁之外工作。
显然,所有这些方法都是有效的,性能取决于实际的代码和设置。但是,我想知道是否对此有任何研究(所以我不必自己做实验)?