昨天在看Cache Client代码的时候,发现在从资源池中获取SocketIO部分代码在高并发情况下效率不高,因此考虑通过一些变通的方式来提高效率,下面说的内容仅仅是当前自己琢磨出来可以部分提高效率的方法,希望看了这篇文章的同学能够有更好的方式或者算法来提高效率。
情景:
Cache Client 的SocketIO资源池是一个两级的Map,具体定义为:ConcurrentMap<String, ConcurrentMap<SockIO, Integer>>。第一级Map以Host作为Key,第二级Map以SockIO本身作为Key,三种SockIO状态(可用,占用,废弃)作为value。之所以采用一个Pool来存储三种状态主要是考虑到在高并发下,多个池之间保持原子性的复杂。
每一次获取可用的SocketIO的操作需要经历:1.遍历Host所在的Map。2.逐个比较状态。3.原子方法获取可用SocketIO。(并发问题所要求的,具体代码可以下载:http://memcache-client-forjava.googlecode.com/files/alisoft-xplatform-asf-cache-2.5.1-src.jar )。
在修改过去的版本里面,首先遍历的过程是一个固定顺序的过程(keyset),这样会导致在高并发的情况下,越来越多的资源申请命中率会下降,因为压力总是落在keyset靠前的那些SockIO上(重复比较)。需要考虑通过什么手段可以提高在高并发下的申请命中率。
思考:
1. 资源申请的越早,被释放的可能性越高,因此是否可以考虑采用更新SockIO最后申请时间来作为后续申请的初步依据。(本身复杂度带来的耗时可能会超过命中率降低带来的损耗)
2. 采用随机数的方式来确定keyset的起始游标,也就不是每次都从keyset第一位开始(可以把keyset看作一个首尾相接的数组)。
3. 在每次资源回收的时候纪录下该资源为可用(当前为每一个Host就记录一个可能可用的资源,简单化操作),作为申请的首选尝试。(尝试不成功在去遍历)。
当前实现了2,3组合,发现效果明显,在500个并发下,每个线程200次操作(一系列动作),压力测试结果如下:
Cache test consume(cache测试总共耗时),average boundle consume(每个线程总耗时),average per request(每个线程每次操作总耗时)
没有作任何改动以前的测试结果:
cache test consume: 11507741, average boundle consume: 57538, average per request :115
采用了2策略以后的测试结果:
cache test consume: 10270512, average boundle consume: 51352, average per request :102
采用了2,3策略以后的测试结果:
cache test consume: 9140660, average boundle consume: 45703, average per request :91
分享到:
相关推荐
云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf云资源池安全建设方案.pdf
用阿里巴巴Druid实现的一个简单连接池,高性能,高并发。
并发池并发池并发池并发池并发池并发池并发池
自定义的JDBC连接池,支持并发访问,可维持多个数据库的连接池
在云计算技术日趋成熟以及业务量迅速增多的推动下,企业部署了多种跨域、异构的云资源池以支持复杂多样的业务场景,随之出现云资源池分散、异构、无法统一管理的现象。本文将阐述如何通过异构资源池管理来实现对分散...
人力资源池是为了最佳利用人力资源以降低成本和提高效率而对人力资源进行组装或分组。 根据新的池组合,人力资源池可以发生在结构更改,合并和群集,现有业务流程和策略的更改上。 利用资源池,可以避免因人员流失和...
云计算资源池建设方案云计算资源池建设方案云计算资源池建设方案云计算资源池建设方案云计算资源池建设方案
在Linux 系统下面用C 语言实现的高并发服务器的代码,具体用到了Epoll,线程池,数据库连接池。 具体可以看下连接http://blog.csdn.net/wuyuxing24/article/details/48758927
本程序主要是讲CORBA分布式资源池实现(jdk1.3):资源池机制应用于一个CORBA 应用程序的服务端,通过使用一个CORBA 对象实例池(instance pool)提高CORBA 应用程序服务端的系统性能
云计算下的云资源池网络分析.pdf
云计算环境下密码资源池系统的应用 BYPASS
数据中心架构资源池改造方案.pdf数据中心架构资源池改造方案.pdf数据中心架构资源池改造方案.pdf数据中心架构资源池改造方案.pdf数据中心架构资源池改造方案.pdf数据中心架构资源池改造方案.pdf
供应商管理和评价数据平台_2020v1——【Vantiq 精品资源池】.pdf供应商管理和评价数据平台_2020v1——【Vantiq 精品资源池】.pdf供应商管理和评价数据平台_2020v1——【Vantiq 精品资源池】.pdf供应商管理和评价数据...
DBCP(DataBase connection pool)...由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
XXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX云资源池安全建设方案.docxXXX...
云计算资源池建设方案.docx
云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx云资源池安全建设方案.docx
博客配套文件,详细演示了一种通用资源池的实现,给出了测试代码。
代码设计风格基于RESTful,以c3p0作为连接池,Redis数据库为媒介实现高并发技术。其中,对于相关的DAO,Service操作,均添加了Junit单元测试实例。 开发文档 一、业务分析 1.秒杀系统业务流程 2.秒杀业务的核心...