待整理
不错的参考资料:
https://www.hotaery.top/brpc/BRPC源码分析之容器篇——FLATMAP和FLATSET/#FlatMapIterator
https://blog.csdn.net/guangyacyb/article/details/104047730
https://illx10000.github.io/2019/01/20/12.html#2-flatmap
https://blog.csdn.net/whizchen/article/details/9286557
注意:
FlatMap的模板声明如下,FlatMap将会根据_Sparse的布尔值来决定选择迭代器类型。当_Sparse为
false时将会使用FlatMapIterator
作为其迭代器,这也是默认行为,当_Sparse
为true
时,将会使用SparseFlatMapIterator
作为迭代器类型,需要注意的是,SparseFlatMapIterator
作为迭代器类型时,FlatMap不支持多线程访问、插入或者删除。
template <typename _K, typename _T,
typename _Hash = DefaultHasher<_K>,
typename _Equal = DefaultEqualTo<_K>,
bool _Sparse = false>
class FlatMap;
多线程迭代FlatMap可能遇到不的问题
save_iterator
、restore_iterator
用于在多线程环境中用于将迭代大map的关键部分划分为较小的部分。 “不一致”是指:
在迭代过程中添加的元素可能会丢失。
某些元素可能会多次迭代。
调整地图大小时,迭代会在开始时重新开始。