[发明专利]高争用环境下的细粒度锁设计方法在审
申请号: | 201910532372.1 | 申请日: | 2019-06-19 |
公开(公告)号: | CN110413260A | 公开(公告)日: | 2019-11-05 |
发明(设计)人: | 张举武 | 申请(专利权)人: | 四川长虹电器股份有限公司 |
主分类号: | G06F8/20 | 分类号: | G06F8/20 |
代理公司: | 成都虹桥专利事务所(普通合伙) 51124 | 代理人: | 郝迎宾 |
地址: | 621000 四*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 争用 细粒度 集合 存储 引用 原语 技术方案要点 独立线程 环境提供 死锁检测 提升性能 同步操作 定位锁 最大化 创建 分段 唤醒 保存 淘汰 优化 维护 | ||
本发明提出一种高争用环境下的细粒度锁设计方法,属于高争用环境下的细粒度锁设计领域。本发明技术方案要点为:采用Java原语实现基础锁机制;进行Key存储;对Key进行hash分段;维护两个集合分别来存储强引用锁和弱引用锁;对集合大小进行限制,并采用LRU算法进行淘汰;计算hash值,未在segment中找到时,创建锁,保存hash值到segment,集合中存入该锁,然后执行同步操作;先定位锁,然后执行唤醒操作;创建独立线程进行死锁检测。本发明针对高争用环境提供了一种粒度更细,性能更高的优化方案,尽可能地让争用的情况减少到最低,进而最大化提升性能。
技术领域
本发明涉及计算机软件编程应用技术,特别涉及高争用环境下的细粒度锁设计方法的技 术。
背景技术
在开发多线程应用程序中,各个线程之间由于要共享资源,必须用到锁机制。
就拿Java来说,几乎每一个Java开发人员都认识synchronized,使用它来实现多线程 的同步操作是非常简单的,只要在需要同步的对方的方法、类或代码块中加入该关键字,它 能够保证在同一个时刻最多只有一个线程执行同一个对象的同步代码,可保证修饰的代码在 执行过程中不会被其他线程干扰。使用synchronized修饰的代码具有原子性和可见性,在需 要进程同步的程序中使用的频率非常高,可以满足一般的进程同步要求。
另外还有常见ReentrantLock、Semaphore、AtomicInteger等。每种机制都有优缺点与 各自的适用场景。但其粒度都太大,同一时刻只有一个线程能进入同步块,这对于某些高并 发的场景并不适用。比如银行客户a向b转账,c向d转账,假如这两个线程并发,代码其 实不需要同步。但是同时有线程3,e向b转账,那么对b而言必须加入同步。
这时需要考虑锁的粒度问题,即细粒度锁,尽可能地让争用的情况减少到最低,进而最 大化提升性能。
发明内容
本发明的目的是提供一种粒度更细,性能更高的高争用环境下的细粒度锁设计方法。
本发明解决其技术问题,采用的技术方案是:高争用环境下的细粒度锁设计方法,包括 如下步骤:
步骤1、采用Java原语实现基础锁机制;
步骤2、进行Key存储;
步骤3、对Key进行hash分段;
步骤4、维护两个集合分别来存储强引用锁和弱引用锁;
步骤5、对集合大小进行限制,并采用LRU算法进行淘汰;
步骤6、计算hash值,未在segment中找到时,创建锁,保存hash值到segment,集合中存入该锁,然后执行同步操作;
步骤7、先定位锁,然后执行唤醒操作;
步骤8、创建独立线程进行死锁检测。
具体的是,步骤2中,使用Memory或Cache或DataBase或FileSystem进行Key存储。
进一步的是,步骤3具体包括如下步骤:
步骤301、实现Lock类增加入参调整锁分段粒度以及锁引用类型;
步骤302、维护一个segment容器来存放存储对象的hash值,和锁对象的存储下标;
步骤303、根据传入的粒度来调整hash mask,进而调整分段的大小实现hash分段。
具体的是,步骤303中,所述传入的粒度范围为1~100。
进一步的是,步骤5具体包括如下步骤:
步骤501、Key第一次被访问,加入到访问历史列表;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川长虹电器股份有限公司,未经四川长虹电器股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910532372.1/2.html,转载请声明来源钻瓜专利网。