std map多线程_SEBR:多线程内存回收方案(1)之ConcurrentHasMap
SEBR处理多线程场景下的一般性GC问题。
为了验证它的有效性,我根据java-1.8版之后的ConcurrentHashMap改成了一个C++的版本(好吧,真实情况是一遍设计SEBR一遍写出这个ConcurrentHashMap)。
由于ConcurrentHashMap是为了Read-mostly设计的,所以这个ConcurrentHashMap相对于之前的版本最大的区别在于:
- 当某个bucket长度达到8,这个bucket就会二叉树化。
- 当长度小于6又会从二叉树转化回链表。
而facebook开源的folly看起来就是参考Java1.7的版本改了改出了一个C++的版本,之前写过它的实现采用了hazard pointers的方式。
所以新的ConcurrentHashMap算法是怎么样的,这一方面已有很多说明源码的资料。
用C++造一个并发数据结构比Java难很多,哪怕是直接照搬Java的实现也很难,最主要的是一般性GC问题,因为没有一个机制去安全地删除已经不需要的数据,而有了SEBR 我就能灵活准确地解决这个问题了。
concurrent_hash_map.hppgithub.com
是C++的一个并发哈希表实现,它不是无锁的,它提供了insert/erase/find三个接口。find接口有两种返回值的实现,一种(find)是将value复制回来,另一种(find_reference)不复制,直接访问哈希表中的value,这种情况下需要考虑value被删除的可能,而通过sebr可以准确地实现这一点。
而使用sebr的方式是在通过retire调用,确保此后的线程再也拿不到这个地址。从而确保当前已经拿到该地址的线程们退出操作之后,便可以物理回收这块内存。
g++ -std=c++17 -pthread -Wall -W -g -O3 -o test test_concurrent_hash_map.cpp
./test 2 100000 8
test_concurrent_hash_mapgithub.com
std map多线程_SEBR:多线程内存回收方案(1)之ConcurrentHasMap相关推荐
- 内存回收在嵌入式系统应用方面的调研和总结
前传 嵌入式系统的内存回收还是比较重要的,因为这块涉及到程序运行性能. 嵌入式系统(比如平板,手机)会更加关注单机性能优化,因而会更加重视系统内存回收. 嵌入式系统不像互联网那种大型分布式服务器系统, ...
- iOS 多线程的四种技术方案
iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...
- fb-caffe-exts:Facebook Caffe 推理多线程调用及内存优化
fb-caffe-exts 是 Facebook 在(主要)生产场景中使用 Caffe 时开发的扩展集合.predictor 是一个简单的 C++ 库,它封装了在共享权重的同时在多个线程中运行 caf ...
- JUC多线程:JMM内存模型与volatile内存语义
一.JMM 内存模型: 1.什么是 JMM 内存模型: Java 内存模型是 Java 虚拟机定义的一种多线程访问 Java 内存各个变量的访问规范,主要围绕如何解决并发过程中的原子性.可见性.有序性 ...
- std::future ---C++17 多线程
std::future -C++17 多线程 std::future C++标准程序库使用future来模拟这类一次性事件:若线程需等待某个特定的一次性事件发生,则会以恰当的方式取得一个future, ...
- java多线程构造函数_java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解...
多线程与JVM内存结构的关系[了解]: 对于最后一个有疑问的构造中stackSize参数,其实学过编程滴人从参数字面就比较容易理解,栈大小嘛,这里从官方文档上来了解一下这个参数: 而之前在学习java ...
- Android6.0以上应用在长时间在后台,因为内存不足导致系统回收内存,当再次启动应用出现Fragment重叠或者空白、异常解决方案(提供模拟内存不足导致系统回收内存的方案)。
Android6.0以上应用在长时间在后台,因为内存不足导致系统回收内存,当再次启动应用出现Fragment重叠或者空白解决方案. 首先提供一个方法模拟内存不足导致系统回收内存的方案: 打开Andro ...
- JVM自动化的内存分配与内存回收
如何区分一个C++程序员和Java程序员?答案是看他吃饭完收不收拾碗筷,反正我是不收拾,哈哈哈哈哈哈. Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回 ...
- JVM学习四:垃圾收集器与内存回收策略
一.经典垃圾收集器 如果垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的实践者.<Java虚拟机规范>对于垃圾收集器的实现没有任何规定. 这里介绍的经典垃圾收集器," ...
最新文章
- eclipse(myeclipse) JavaWeb项目导入Idea2017
- 我喜欢的设计好的网站列表
- 浏览器中遮罩层镂空效果的多种实现方法
- android sdk入门(1)
- .NET西安社区 [拥抱开源,又见 .NET] 活动简报
- JLBH示例2 –协调遗漏的会计处理
- 查看表状态及索引碎片语句
- 用TextPaint来绘制文字
- LintCode 1862. 给树浇水的时间(图的遍历)
- 关于Spring MVC 中地址栏访问 /WEB-INF下的.jsp
- SP2010开发和VS2010专家食谱--第四章节—列表定义和内容类型(7)--创建列表定义...
- python中for循环缩进_Python基础- 缩进,选择和循环
- nexus build docker private registry
- mtkwin10驱动_【MTK通用USB刷机驱动下载】MTK通用USB刷机驱动 Win7/Win10 自动安装版-开心电玩...
- 2022年11月信息系统项目管理师考试论文相关内容预测
- 中考计算机上机考试如何操作,全国2021年初中信息技术中招考试上机考试提分技巧...
- ios怎么把电话号码存到android,如何将苹果手机的通讯录导入到安卓手机中?看这里...
- think php 5(命令行)创建控制器、model
- 周志华教授:如何做研究与写论文?
- word文档可以打开但显示乱码的完全解决攻略