概述
硬件事务内存有能力提供多线程并发访问数据结构的需要,并可以通过缓存一致性协议
来避免数据冲突的发生。HTM(硬件事务内存)旨在为你提供更细粒度锁的扩展性以及简单的粗粒度
加锁操作,并且性能与无锁操作不相上下。如果你使用支持它的虚拟机版本的话,通过简单的所控制
或者类库不需要多大改动就可以做到在具有大量处理核的环境中正常使用的效果。
然而如果要为C或者C++类型的程序添加这种支持那也是很有意义的事情,对java虚拟机生成的本地代码添加
也不会对生成的字节码信息有所改动。
总之,有了它就可以在并发的时候具备了执行并发的能力,甚至对于并发写操作或者即使发生异常的情况下,只要还是在执行同一个代码块处理器都能游刃有余的解决。
什么是硬件事务内存,使用它的资源消耗如何?
硬件事务内存虽然已经被提出了有些年了,但是直到如今它的使用还不是主流。通过Intel在它的第四代i3/i5/i7(Haswell)
和E3-1200 V3(包括4核的,一个异步传输socket接口)家族的处理器上提供了对硬件事务内存的支持。在今年的晚些时候,或者
下年我们会看到会有越来越多的CPU会提供对它的支持,AFAIK、AMD很快也会计划增加对它的支持。
顺便说一下Azul's Vega系统对此的支持已经有了差不多十个年头了,希望Azul成为率先在jvm上增加支持做出好的表率来。
说不定你的机器已经是能支持它的,很多新型的笔记本一般都会使用支持Haswell的处理器来优化电池性能。
它的实现机制是什么样的?
在java中,轻易是不会使用synchronized关键字的。为了代码的简洁,这样的加锁不仅比做任何操作都要锁定整个对象或者map
的Hashtable更粗糙,更比不上使用更细粒度锁机制的ConcurrentHashMap了。由于锁机制使用的易错性。硬件事务内存就是为了让设计者可以不必太关注锁的使用却能获得很好的使用效果。这使得可以不用花心思优化就能做出很好的锁控制效果。
例如
private final Map<String, PooledObject> map = new HashMap<>(); public synchronized PooledObject acquireObject(String key) { PooledObject object = map.get(key); if (object == null) map.put(key, object = new PooledObject()); return object; }
你可能有以下的场景要去处理
1.只希望对map进行读取
2.用不同的key来更新不同的value
3.很少会出现两个线程同时去更新同一key的情况
那么你所需要的又是什么呢
1.多线程并发执行
2.加锁和不加锁的情况下代码改动不大
3.不用修改代码,Cpu或者JVM会自动对其做优化
public PooledObject acquireObject(String key) { int code; do { xbegin(); PooledObjectobject = map.get(key); if (object == null) map.put(key, object = new PooledObject()); return map; } while((code = xend()) == RETRYABLE); if (code != DONE) { // take corrective action such as // obtain a normal lock and repeat } }
如果没有HTM,即使在大多数是读的情况下,也必须通过同步加锁获取锁并且强制对资源的线性访问。
使用HTM的情况下伪代码可以如下编写
public PooledObject acquireObject(String key) { int code; do { xbegin(); PooledObjectobject = map.get(key); if (object == null) map.put(key, object = new PooledObject()); return map; } while((code = xend()) == RETRYABLE); if (code != DONE) { // take corrective action such as // obtain a normal lock and repeat } }
XEND指令会检查当前的读取集合和缓存中的写集合,并判断是否它们的缓存行已经被其他CPU或者线程过,
如果没有被修改过,指令会提交修改的内容。否则任何的修改都会被丢弃然后循环执行此操作。
注意:事务回滚会还原修改的内容并且销毁对象以防会有副作用。如果担心数据回滚造成的影响,则应该调用XABORT指令来丢弃事务并且利用代码进行恢复。
因为CAS操作在64位系统上是受限制的,那么对于这些事务限制又有哪些啊?
首先是可以在L1缓存层上的行数是有限的。最多只有32KB的大小。如果是支持超线程的,那么可能只16KB了。
另外因为L1缓存层是八通道的,最坏情况下9个缓存行被映射到其上的话就会导致事务失败,然而即使这样也比64位上的CAS或者128位上的2CAS的灵活性要好的多。
相关推荐
【标题】:为什么说多线程是鸡肋?神级程序员带你真正熟练使用多线程! 【描述】:本文将探讨Python多线程为何被称为鸡肋,并指导如何有效利用多线程。 【标签】:Python,多线程,多进程,GIL,线程安全 【正文...
标题中的“Prompt IDE来了⋯是划时代AI神器还是鸡肋?”暗示了这是一款与人工智能(AI)相关的集成开发环境(IDE)。IDE是程序员用于编写、调试和运行代码的软件工具,而Prompt IDE可能是专为AI开发设计的新一代平台...
【标题】:“为什么说多线程是鸡肋?神级程序员带你真正熟练使用多线程!” 【描述】:本文将探讨 Python 中多线程的局限性和如何有效地利用多线程,以及介绍多进程作为替代方案。 【标签】:Python,多线程,GIL...
压缩裤在越野跑中可能会更有优势,因为它们可以帮助保护腿部免受崎岖地形的伤害,但在追求轻量化装备的公路跑中,它们可能显得多余。 实际上,跑步的基本装备如合适的跑鞋和透气的运动服装才是最重要的。一双好的...
7. **大灯清洗装置**:大灯清洗装置在雪地或沙尘环境中有用,但在大多数天气条件下,车主更倾向于在洗车时清洁大灯,因此在常规驾驶中并非必需。 这些配置的出现反映了汽车制造商试图通过增加高级功能来吸引消费者...
Prompt IDE 是一种新兴的开发工具,它将编程中的交互式集成开发环境(IDE)与人工智能领域的...然而,是否能成为划时代的神器,还需要看其实际应用中的效果和用户反馈,毕竟,理论上的便利性需要经得起实践的检验。
小程序?——奢侈品牌的鸡肋之选?.pdf
其在数据处理、算法效率方面的优势,使得AI芯片在图像和视频处理等领域的应用变得不可或缺。随着技术的进一步发展,AI芯片将为消费者带来更为神奇的日常应用,极大推动智能手机以及其他终端设备智能化的进程。
"智能空气净化器不智能,反成鸡肋?" 在当下的智能时代,智能空气净化器似乎已经成为了家电行业的一个热点话题。然而,在智能空气净化器的razy追逐中,究竟什么是真正的智能?智能空气净化器真的智能了吗?或者只是...
在需要高速处理的关键任务中,如图像处理,可以将复杂的算法硬件化,通过总线与SOPC系统连接,让SOPC负责数据管理和调度,从而实现高效运行。通过优化算法指令,增加专用指令硬件,还能进一步提升SOPC的性能。 此外...
然而,随着技术的发展,FMEA的地位似乎变得有些尴尬,被称作“鸡肋”。以下是关于FMEA及其在不同领域的应用和现状的详细分析: 1. **FMEA的起源与演变**: - FMEA最初由美国军方在20世纪50年代用于复杂系统,随后...
JavaWeb鸡肋代码生成器是一个实用工具,专为JavaWeb开发者设计,旨在简化常见的编码工作。这个工具的主要功能是根据数据库中的数据表自动创建MVC架构的基类,从而节省开发者手动编写这些基础代码的时间。在JavaWeb...
log4j 1.x 与 logback 的鸡肋RCE讨论.pdf log4j2 JNDI 注入漏洞分析.pdf Object Serialization Stream Protocol.pdf OFCMS 1.1.4后台存在Freemarker模板命令注入漏洞.docx OWASP Top 10 20134e2d65877248-V1.3.pdf ...
例如,`GenerateCodeUtils` 类中的 `isTrue` 方法会检查输入参数是否为空,如果满足条件则调用 `GenerateCode` 方法来生成代码。在这个过程中,你可以指定 SQL 连接信息、输出目录、数据库表名、作者信息、包名以及...
COOKIE管理 ,上网中的COOKIE如同三国中的鸡肋 食之无味弃之可惜 多亏有了”COOKIE管理工具
标题中的“薄煤无人开采让“鸡肋”变“真金”——峰峰集团薛村矿实现无人值守远程自动化开采侧记”揭示了一个关键的IT技术应用领域:矿业的自动化与智能化。在煤炭行业中,薄煤层开采由于其难度大、效率低、安全性差...
在JAVA中,可以使用`Random`类来生成随机数,通过这些随机数来决定迷宫墙壁的存在与否。通常,迷宫可以用二维数组或者二维链表来表示,每个元素代表一个格子,值为0或1分别代表空地和墙壁。随机生成迷宫的过程就是...
无论是日常的个人通讯,还是团队协作,Q+Web都能够胜任,让用户在网页上享受与客户端相媲美的聊天体验,从而真正摆脱了“网页聊QQ是鸡肋”的传统观念。无论是快速发起对话,高质量的音视频通话,还是高效的文件分享...
薄煤无人开采让“鸡肋”变“真金”——峰峰集团薛村矿实现无人值守远程自动化开采侧记.pdf