c++ 中 设计一个线程安全的map
最近在写一个底层网络模块,由于同时有上万个连接,因此得设计一个保证线程安全且性能不错的map。这时候我特别怀念java,它有一个线程安全的容器库,而C++不知为什么一直没有,只好自己设计一个了。由于有数十万个连接,因此ConcurrentMap内部必须分多个map来保存数据,比如说每个子map负责两万个连接,当连接数超过两万个时,ConcurrentMap内部必须创建另外一个子map和互斥
·
最近在写一个底层网络模块,由于同时有上万个连接,因此得设计一个保证线程安全且性能不错的map。
这时候我特别怀念java,它有一个线程安全的容器库,而C++不知为什么一直没有,只好自己设计一个了。
由于有数十万个连接,因此ConcurrentMap内部必须分多个map来保存数据,比如说每个子map负责两万个连接,当连接数超过两万个时,ConcurrentMap内部必须创建另外一个子map和互斥锁来处理,因为假如所有连接都用一个map和互斥锁来处理的话,显然效率太低了。这个时候你还需要一个hash算法来映射一下,决定放到哪个子map里,直接%10比较简单。
子map和互斥锁可以用两个vector来存储。
考虑到对map的查询和改写操作,可以加一个读写锁。
嗯,每个子map都对应一个读锁和写锁。
看情况吧,假如性能过得去的话就不用ConcurrentMap了,上述想法实现起来实在恶心了点。
更多推荐
已为社区贡献3条内容
所有评论(0)