[发明专利]一种实现并发容器的方法和装置有效
申请号: | 201710261006.8 | 申请日: | 2017-04-20 |
公开(公告)号: | CN108733361B | 公开(公告)日: | 2022-03-04 |
发明(设计)人: | 张志维 | 申请(专利权)人: | 北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F9/52 |
代理公司: | 中原信达知识产权代理有限责任公司 11219 | 代理人: | 张一军;姜劲 |
地址: | 100195 北京市海淀区杏石口路6*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 并发 容器 方法 装置 | ||
本发明提供一种实现并发容器的方法和装置,有助于通过增加子容器的方式,而在内存上物理隔离数据,从而减少了由于轮询容器锁而引起的CPU消耗。该方法的特征在于,该并发容器是由多个子容器组成的父容器,按如下步骤对该父容器进行创建:向该父容器中的一个子容器添加数据,并记录所添加的数据在该父容器中的序号,当所添加的数据的量达到第一阈值时,在内存中创建一个新的子容器;以及继续向所创建的新的子容器中添加数据,并记录所添加的数据在该父容器中的序号,当所添加的数据的量达到第一阈值时,在内存中再次创建另一新的子容器;以此类推,直至所有数据被添加至父容器为止,其中子容器在内存中彼此物理隔离。
技术领域
本发明涉及计算机技术领域,尤其涉及一种实现并发容器的方法和装置。
背景技术
在编写程序的时常常需要对大量的对象引用进行管理。为了实现有效的归类管理,将同类的引用放置在同一数据容器中。例如,JAVA容器是JAVA API(ApplicationProgramming Interface,应用程序接口)所提供的一系列类的实例,用于在程序中存放对象,可以被理解为存放数据的集合。由于在数据容器中存放了随时可能被使用的对象引用,所以一般的数据容器均提供查询、遍历、修改等基本接口功能。
JAVA容器分为同步容器和并发容器。同步容器包括Vector,Hashtable等。在使用同步容器的情况下,同步容器通过封装线程的状态来实现线程安全,即当线程尝试对容器中的数据进行操作时,需要占据该容器的锁,以防止其他线程影响数据。如果多个线程调用同步容器,则这些线程将会通过抢占容器的独占锁来串行执行对同步容器的调用,从而降低了并发性。当多个线程竞争容器的独占锁时,吞吐量严重下降。所以在需要支持线程并发的环境中,可以考虑使用并发容器来替代同步容器。并发容器是针对多个线程并发访问容器而设计的,并发容器包括ConcurrentHashMap,CopyOnWriteArrayList等。并发容器使用了与同步容器完全不同的加锁策略来提供更高的并发性和伸缩性,例如在ConcurrentHashMap中采用了一种粒度更细的加锁机制,可以称为分段锁,在这种锁机制下,允许任意数量的读操作线程并发地访问容器,并且读操作线程和写操作线程也可以并发的访问容器,同时允许一定数量的写操作线程并发地修改容器,所以并发容器可以在并发环境下实现更高的吞吐量。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:在目前的编程过程中,为避免并发操作某个集合导致数据一致性的差异(例如:集合中一个数据同时被多个线程修改,则无法确定哪个线程最后修改的该条数据),通常采用支持并发操作的集合(例如:CopyOnWriteArrayList等)。在日常使用容器过程中经常会遇到这样一个场景:多个线程同时往一个支持并发操作的容器中写入数据,一个线程从该容器中随机读取数据进行处理。此时多个线程抢夺该容器的同步锁,抢到锁的线程对数据进行修改或者读取,未抢到锁的线程此时一直等待获得同步锁。此时大量的CPU资源消耗在了等待获得同步锁的过程中,造成处理性能随着容器中数据量的增加而降低。虽然并发容器CopyOnWriteArrayList的性能已经优于同步容器Vector,但在实际使用中,某些大并发场景仍然无法满足需求。
图1是现有技术中同步容器的流程图。以向同步容器中添加数据为例:在步骤S101中,一个线程开始尝试操作数据;在步骤S12中,该线程请求同步容器的独占锁;如果在S102中该线程未能成功获得容器的独占锁,则进入步骤S103,该线程循环请求锁,直至获得该容器的独占锁;如果在S102中该线程成功获得容器的独占锁,则进入步骤S104,该线程对数据进行操作;接下来,在步骤S105中,在该线程完成数据操作后,释放所占据的独占锁;至此,完成向同步容器中添加数据的操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司,未经北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710261006.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:指纹识别算法固化硬件函数
- 下一篇:一种数据质量检验方法和装置