0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

池化技术的应用实践

jf_ro2CN3Fa 来源:稀土掘金技术社区 2023-11-24 10:22 次阅读

1 一些废话

作为一名Java开发人员,池化技术或多或少在业务代码中使用。常见的包括线程池、连接池等。也是因为Java语言超级丰富的基建,基本上这些池化能力都有着相对成熟的“工具”。

比如,需要使用线程池的时候常常会选择Spring提供的 ThreadPoolTaskExecutor , 工具内部替我们维护了线程的生命周期与任务的状态变化。

线程池的运转流程图

f9c57a96-8a69-11ee-939d-92fbcf53809c.png

2 正文开始

在笔者的业务场景里,java服务需要通过命令行启动一个特殊进程,并在进程使用完后将其销毁。而业务对启动这个进程的整体耗时较为敏感,打算利用池化技术,将进程池化复用,去除启动进程的消耗,达到优化性能的目标。

f9e0251c-8a69-11ee-939d-92fbcf53809c.png

认识 GenericObjectPool

池化技术的概念大家可能都比较熟悉了,但真正要从零开始实现池化能力,就会感觉困难很多。好在Java丰富的基建在提供ThreadPoolTaskExecutor的同时,也提供了GenericObjectPool这个辅助我们实现自定义对象池化的工具。顺带提一句:JedisPool就是使用这个工具实现的。

GenericObjectPool构造方法一共就3个参数,只有PooledObjectFactory必传;

/**
*Createsanew{@codeGenericObjectPool}thattracksanddestroys
*objectsthatarecheckedout,butneverreturnedtothepool.
*
*@paramfactoryTheobjectfactorytobeusedtocreateobjectinstances
*usedbythispool
*@paramconfigThebasepoolconfigurationtouseforthispoolinstance.
*Theconfigurationisusedbyvalue.Subsequentchangesto
*theconfigurationobjectwillnotbereflectedinthe
*pool.
*@paramabandonedConfigConfigurationforabandonedobjectidentification
*andremoval.Theconfigurationisusedbyvalue.
*/
publicGenericObjectPool(finalPooledObjectFactoryfactory,
finalGenericObjectPoolConfigconfig,finalAbandonedConfigabandonedConfig){
}

PooledObjectFactory 按照方法注释的描述,它是专门负责给池子创建对象实例的。当然除了创建对象(makeObject), 还包括了检验、激活、销毁对象。基本涵盖了对象生命周期中的各个阶段。

voidactivateObject(PooledObjectp)throwsException;

voiddestroyObject(PooledObjectp)throwsException;

PooledObjectmakeObject()throwsException;

voidpassivateObject(PooledObjectp)throwsException;

booleanvalidateObject(PooledObjectp);

更加详细的说明可以浏览 GenericObjectPool's apidocs [1]。源码的注释也很详细值得一看。

使用 GenericObjectPool

先引入依赖


org.apache.commons
commons-pool2
${version}

根据自身业务实现PooledObjectFactory接口;作者的业务场景是进程池化,那么对应的创建对象、销毁对象的方法就是创建进程和销毁进程的代码。

publicclassMyProcessFactoryimplementsPooledObjectFactory{
@Override
publicvoiddestroyObject(PooledObjectp)throwsException{
finalMyProcessprocess=p.getObject();
if(null!=process){
//销毁进程
process.stop();
}
}

@Override
publicPooledObjectmakeObject()throwsException{
//这里就是去创建一个进程
MyProcessprocess=newMyProcess();
process.start();
returnnewDefaultPooledObject<>(process);
}

//剩下几个方法也可以按需实现
}

下一步就是构建 GenericObjectPool 实例

PooledObjectFactoryfactory=newMyProcessFactory();
GenericObjectPoolpool=newGenericObjectPool(factory);

使用GenericObjectPool

//获取进程实例
MyProcessprocess=pool.borrowObject();

//归还实例
pool.returnObject(process);

进阶使用 GenericObjectPoolConfig

顾名思义,GenericObjectPoolConfig是池化工具的配置类;它包含了池的最大容量、池的最大空闲数、最小空闲数等核心参数。除此之外在它的父类 BaseObjectPoolConfig 中,空闲对象检测规则,对象存放队列进出规则(LIFO)等更加细节的配置。

/**
*Thedefaultvalueforthe{@codemaxTotal}configurationattribute.
*@seeGenericObjectPool#getMaxTotal()
*/
publicstaticfinalintDEFAULT_MAX_TOTAL=8;

/**
*Thedefaultvalueforthe{@codemaxIdle}configurationattribute.
*@seeGenericObjectPool#getMaxIdle()
*/
publicstaticfinalintDEFAULT_MAX_IDLE=8;

/**
*Thedefaultvalueforthe{@codeminIdle}configurationattribute.
*@seeGenericObjectPool#getMinIdle()
*/
publicstaticfinalintDEFAULT_MIN_IDLE=0;

通过调整这些参数值,就能创建符合业务要求的池子。下面就是能常驻4个进程的一套配置参数。

privateGenericObjectPoolConfiggenericObjectPoolConfig(){
finalGenericObjectPoolConfigconfig=newGenericObjectPoolConfig<>();
config.setMaxTotal(20);//池的最大容量
config.setMaxIdle(4);//最大空闲连接数
config.setMinIdle(0);//最小空闲连接数
config.setMaxWait(Duration.ofSeconds(5));//获取对象时最大等待时间
config.setTimeBetweenEvictionRuns(Duration.ofMinutes(1));//空闲对象检查间隔
config.setMinEvictableIdleTime(Duration.ofMinutes(10));//空闲对象被移除的最小空闲时间
config.setTestOnBorrow(true);
config.setLifo(false);
returnconfig;
}

3 后续

当然真实的业务中还会有很多不相关的逻辑夹杂其中,上文基本涵盖了池化对象搭建与配置的实现方法。最终也实现了性能优化的目标。希望此文能为大家在池化运用多些帮助。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103000
  • 线程池
    +关注

    关注

    0

    文章

    53

    浏览量

    6768
  • 命令行
    +关注

    关注

    0

    文章

    75

    浏览量

    10345
  • 池化
    +关注

    关注

    0

    文章

    4

    浏览量

    1089
收藏 人收藏

    评论

    相关推荐

    无线遥控遥测技术实践

    无线遥控遥测技术实践 本章就电子电路的调试与检测技术的方方面面%内容#原理#方法等&做一简要介绍"供学生在创新
    发表于 04-21 09:20 0次下载

    《电子技术实践与训练 》第2版_廖先芸

    电子发烧友网站提供《《电子技术实践与训练 》第2版_廖先芸.txt》资料免费下载
    发表于 08-13 17:11 0次下载

    EDA技术实践

    EDA技术实践,覃园芳PPT讲解。
    发表于 04-14 17:53 0次下载

    印制电路板(PCB)设计技术实践.haozip02

    印制电路板(PCB)设计技术实践.haozip02,一共分为2部分上传,有需要的要全部都下载解压打开哦!
    发表于 06-22 15:56 0次下载

    印制电路板(PCB)设计技术实践.haozip01

    印制电路板(PCB)设计技术实践.haozip01,一共分为2部分上传,有需要的要全部都下载解压打开哦!
    发表于 06-22 15:56 0次下载

    PCB电磁兼容技术—设计实践 244页 2.9M

    PCB电磁兼容技术—设计实践,很全面
    发表于 12-16 22:01 0次下载

    微服务与容器技术实践

    基于微服务架构的技术实践(点击下载演讲PPT) 普元信息主任架构师顾伟在演讲中,分享了他们对微服务架构的认识,包括微服务演进过程、常见认知误区等,并阐述了结合容器云技术,分享在微服务架构中做的关键
    发表于 10-10 10:23 1次下载
    微服务与容器<b class='flag-5'>技术</b><b class='flag-5'>实践</b>

    无线传输与组网技术物联网技术实践

    无线传输与组网技术物联网技术实践
    发表于 10-26 10:11 15次下载
    无线传输与组网<b class='flag-5'>技术</b>物联网<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>

    有线传输与组网技术物联网技术实践2

    有线传输与组网技术物联网技术实践2
    发表于 10-26 10:14 10次下载
    有线传输与组网<b class='flag-5'>技术</b>物联网<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>2

    RFID技术物联网技术实践

    RFID技术物联网技术实践
    发表于 10-26 10:16 17次下载
    RFID<b class='flag-5'>技术</b>物联网<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>

    传感器技术物联网技术实践

    传感器技术物联网技术实践
    发表于 10-26 10:19 23次下载
    传感器<b class='flag-5'>技术</b>物联网<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>

    嵌入式技术基础与实践(第4版)

    嵌入式技术基础与实践(第4版)
    发表于 10-20 16:06 0次下载
    嵌入式<b class='flag-5'>技术</b>基础与<b class='flag-5'>实践</b>(第4版)

    HarmonyOS 测试技术实践-HarmonyOS 软件测试技术

    2021华为开发者大会HarmonyOS 测试技术实践-HarmonyOS 软件测试技术
    的头像 发表于 10-23 14:19 1432次阅读
    HarmonyOS 测试<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>-HarmonyOS 软件测试<b class='flag-5'>技术</b>栈

    HarmonyOS 测试技术实践-DevEco Testing测试服务

    2021华为开发者大会HarmonyOS 测试技术实践-DevEco Testing测试服务
    的头像 发表于 10-23 14:20 2580次阅读
    HarmonyOS 测试<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>-DevEco Testing测试服务

    HarmonyOS 测试技术实践-远程环境便捷完成开发测试

    HDC 2021华为开发者HarmonyOS 测试技术实践-助力开发者远程环境便捷完成开发测试
    的头像 发表于 10-23 14:37 1158次阅读
    HarmonyOS 测试<b class='flag-5'>技术</b>与<b class='flag-5'>实践</b>-远程环境便捷完成开发测试