在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

池化技術(shù)的應(yīng)用實(shí)踐

jf_ro2CN3Fa ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-11-24 10:22 ? 次閱讀

1 一些廢話

作為一名Java開發(fā)人員,池化技術(shù)或多或少在業(yè)務(wù)代碼中使用。常見的包括線程池、連接池等。也是因?yàn)镴ava語言超級豐富的基建,基本上這些池化能力都有著相對成熟的“工具”。

比如,需要使用線程池的時(shí)候常常會選擇Spring提供的 ThreadPoolTaskExecutor , 工具內(nèi)部替我們維護(hù)了線程的生命周期與任務(wù)的狀態(tài)變化。

線程池的運(yùn)轉(zhuǎn)流程圖

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

2 正文開始

在筆者的業(yè)務(wù)場景里,java服務(wù)需要通過命令行啟動一個(gè)特殊進(jìn)程,并在進(jìn)程使用完后將其銷毀。而業(yè)務(wù)對啟動這個(gè)進(jìn)程的整體耗時(shí)較為敏感,打算利用池化技術(shù),將進(jìn)程池化復(fù)用,去除啟動進(jìn)程的消耗,達(dá)到優(yōu)化性能的目標(biāo)。

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

認(rèn)識 GenericObjectPool

池化技術(shù)的概念大家可能都比較熟悉了,但真正要從零開始實(shí)現(xiàn)池化能力,就會感覺困難很多。好在Java豐富的基建在提供ThreadPoolTaskExecutor的同時(shí),也提供了GenericObjectPool這個(gè)輔助我們實(shí)現(xiàn)自定義對象池化的工具。順帶提一句:JedisPool就是使用這個(gè)工具實(shí)現(xiàn)的。

GenericObjectPool構(gòu)造方法一共就3個(gè)參數(shù),只有PooledObjectFactory必傳;

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

PooledObjectFactory 按照方法注釋的描述,它是專門負(fù)責(zé)給池子創(chuàng)建對象實(shí)例的。當(dāng)然除了創(chuàng)建對象(makeObject), 還包括了檢驗(yàn)、激活、銷毀對象。基本涵蓋了對象生命周期中的各個(gè)階段。

voidactivateObject(PooledObjectp)throwsException;

voiddestroyObject(PooledObjectp)throwsException;

PooledObjectmakeObject()throwsException;

voidpassivateObject(PooledObjectp)throwsException;

booleanvalidateObject(PooledObjectp);

更加詳細(xì)的說明可以瀏覽 GenericObjectPool's apidocs [1]。源碼的注釋也很詳細(xì)值得一看。

使用 GenericObjectPool

先引入依賴


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

根據(jù)自身業(yè)務(wù)實(shí)現(xiàn)PooledObjectFactory接口;作者的業(yè)務(wù)場景是進(jìn)程池化,那么對應(yīng)的創(chuàng)建對象、銷毀對象的方法就是創(chuàng)建進(jìn)程和銷毀進(jìn)程的代碼。

publicclassMyProcessFactoryimplementsPooledObjectFactory{
@Override
publicvoiddestroyObject(PooledObjectp)throwsException{
finalMyProcessprocess=p.getObject();
if(null!=process){
//銷毀進(jìn)程
process.stop();
}
}

@Override
publicPooledObjectmakeObject()throwsException{
//這里就是去創(chuàng)建一個(gè)進(jìn)程
MyProcessprocess=newMyProcess();
process.start();
returnnewDefaultPooledObject<>(process);
}

//剩下幾個(gè)方法也可以按需實(shí)現(xiàn)
}

下一步就是構(gòu)建 GenericObjectPool 實(shí)例

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

使用GenericObjectPool

//獲取進(jìn)程實(shí)例
MyProcessprocess=pool.borrowObject();

//歸還實(shí)例
pool.returnObject(process);

進(jìn)階使用 GenericObjectPoolConfig

顧名思義,GenericObjectPoolConfig是池化工具的配置類;它包含了池的最大容量、池的最大空閑數(shù)、最小空閑數(shù)等核心參數(shù)。除此之外在它的父類 BaseObjectPoolConfig 中,空閑對象檢測規(guī)則,對象存放隊(duì)列進(jìn)出規(guī)則(LIFO)等更加細(xì)節(jié)的配置。

/**
*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;

通過調(diào)整這些參數(shù)值,就能創(chuàng)建符合業(yè)務(wù)要求的池子。下面就是能常駐4個(gè)進(jìn)程的一套配置參數(shù)。

privateGenericObjectPoolConfiggenericObjectPoolConfig(){
finalGenericObjectPoolConfigconfig=newGenericObjectPoolConfig<>();
config.setMaxTotal(20);//池的最大容量
config.setMaxIdle(4);//最大空閑連接數(shù)
config.setMinIdle(0);//最小空閑連接數(shù)
config.setMaxWait(Duration.ofSeconds(5));//獲取對象時(shí)最大等待時(shí)間
config.setTimeBetweenEvictionRuns(Duration.ofMinutes(1));//空閑對象檢查間隔
config.setMinEvictableIdleTime(Duration.ofMinutes(10));//空閑對象被移除的最小空閑時(shí)間
config.setTestOnBorrow(true);
config.setLifo(false);
returnconfig;
}

3 后續(xù)

當(dāng)然真實(shí)的業(yè)務(wù)中還會有很多不相關(guān)的邏輯夾雜其中,上文基本涵蓋了池化對象搭建與配置的實(shí)現(xiàn)方法。最終也實(shí)現(xiàn)了性能優(yōu)化的目標(biāo)。希望此文能為大家在池化運(yùn)用多些幫助。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2986

    瀏覽量

    107073
  • 線程池
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    7095
  • 命令行
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    10537
  • 池化
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1170
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    動態(tài)線程思想學(xué)習(xí)及實(shí)踐

    相關(guān)文檔 美團(tuán)線程實(shí)踐:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html 線程思想解析:https
    的頭像 發(fā)表于 06-13 15:43 ?1491次閱讀
    動態(tài)線程<b class='flag-5'>池</b>思想學(xué)習(xí)及<b class='flag-5'>實(shí)踐</b>

    買藥秒送 JADE動態(tài)線程實(shí)踐及原理淺析

    一、背景及JADE介紹 買藥秒送是健康即時(shí)零售業(yè)務(wù)新的核心流量場域,面對京東首頁高流量曝光,我們對頻道頁整個(gè)技術(shù)架構(gòu)方案進(jìn)行升級,保障接口高性能、系統(tǒng)高可用。 動態(tài)線程是買藥頻道應(yīng)用的技術(shù)之一
    的頭像 發(fā)表于 09-04 11:11 ?1122次閱讀
    買藥秒送 JADE動態(tài)線程<b class='flag-5'>池</b><b class='flag-5'>實(shí)踐</b>及原理淺析

    OpenHarmony3.1 Release版本特性解析——OpenHarmony硬件資源架構(gòu)介紹

    ,實(shí)現(xiàn)硬件互助、資源共享,為用戶提供流暢的全場景體驗(yàn)。本期,我們通過介紹 OpenHarmony 的硬件資源框架,為大家揭曉 OpenHarmony 是如何實(shí)現(xiàn)多設(shè)備協(xié)同的。一、硬件資源訪問的演進(jìn)
    發(fā)表于 05-23 16:42

    分布式系統(tǒng)硬件資源原理和接入實(shí)踐

    把各個(gè)設(shè)備的硬件外設(shè)抽象為外設(shè)信息單元,外設(shè)信息在各個(gè)可信設(shè)備之間自動同步,如此,實(shí)現(xiàn)了外設(shè)信息的全局可見;結(jié)合分布式硬件虛擬技術(shù),實(shí)現(xiàn)任意設(shè)備之間的硬件外設(shè)能力跨設(shè)備調(diào)用;分布式硬件資源作為系統(tǒng)
    發(fā)表于 12-06 10:02

    鎘薄膜太陽能電

    鎘薄膜太陽能電
    發(fā)表于 02-08 00:35 ?8次下載

    基于CXL技術(shù)的大內(nèi)存方案解析

    如果 FaceBoo k平臺創(chuàng)建的TPP協(xié)議是正確的,那么它將有一個(gè)不同的內(nèi)存分頁系統(tǒng),可以更好地解決由于在服務(wù)器主板之外有大量內(nèi)存而帶來的稍高的延遲。
    發(fā)表于 10-20 11:46 ?2493次閱讀

    基于Nacos的簡單動態(tài)線程實(shí)現(xiàn)

    本文以Nacos作為服務(wù)配置中心,以修改線程核心線程數(shù)、最大線程數(shù)為例,實(shí)現(xiàn)一個(gè)簡單的動態(tài)線程
    發(fā)表于 01-06 14:14 ?1057次閱讀

    公用包Commons Pool 2

    Redis 的常用客戶端 Jedis,就是使用 Commons Pool 管理連接的,可以說是一個(gè)最佳實(shí)踐。下圖是 Jedis 使用工廠創(chuàng)建對象的主要代碼塊。對象工廠類最主要的方法就是
    的頭像 發(fā)表于 05-04 10:36 ?1255次閱讀
    公用<b class='flag-5'>池</b><b class='flag-5'>化</b>包Commons Pool 2

    卷積神經(jīng)網(wǎng)絡(luò)中的方式

    卷積神經(jīng)網(wǎng)絡(luò)的最基本結(jié)構(gòu)有卷積層跟層,一般情況下,層的作用一般情況下就是下采樣與像素遷移不變性。根據(jù)步長區(qū)分,
    的頭像 發(fā)表于 10-21 09:42 ?1566次閱讀
    卷積神經(jīng)網(wǎng)絡(luò)中的<b class='flag-5'>池</b><b class='flag-5'>化</b>方式

    什么是內(nèi)存

    1什么是內(nèi)存 1.1技術(shù) 所謂“技術(shù)”,就
    的頭像 發(fā)表于 11-08 16:26 ?1330次閱讀
    什么是內(nèi)存<b class='flag-5'>池</b>

    高并發(fā)內(nèi)存項(xiàng)目實(shí)現(xiàn)

    相關(guān)知識 1、技術(shù) 技術(shù)就是程序先向系統(tǒng)申請過量的資源,并將這些資源管理起來,避免頻繁的
    的頭像 發(fā)表于 11-09 11:16 ?975次閱讀
    高并發(fā)內(nèi)存<b class='flag-5'>池</b>項(xiàng)目實(shí)現(xiàn)

    了解連接、線程、內(nèi)存、異步請求

    技術(shù) 技術(shù)能夠減少資源對象的創(chuàng)建次數(shù),提?程序的響應(yīng)性能,特別是在?并發(fā)下這種提?更加明
    的頭像 發(fā)表于 11-09 14:44 ?1788次閱讀
    了解連接<b class='flag-5'>池</b>、線程<b class='flag-5'>池</b>、內(nèi)存<b class='flag-5'>池</b>、異步請求<b class='flag-5'>池</b>

    內(nèi)存主要解決的問題

    內(nèi)存的定義 1.技術(shù) 是在計(jì)算機(jī)技術(shù)中經(jīng)常使用的一種設(shè)計(jì)模式,其內(nèi)涵在于:將程序中需要
    的頭像 發(fā)表于 11-13 15:23 ?1039次閱讀
    內(nèi)存<b class='flag-5'>池</b>主要解決的問題

    線程的運(yùn)轉(zhuǎn)流程圖 技術(shù)實(shí)踐案例解析

    作為一名Java開發(fā)人員,技術(shù)或多或少在業(yè)務(wù)代碼中使用。常見的包括線程、連接等。也是因?yàn)镴ava語言超級豐富的基建,基本上這些
    的頭像 發(fā)表于 11-24 10:22 ?664次閱讀
    線程<b class='flag-5'>池</b>的運(yùn)轉(zhuǎn)流程圖 <b class='flag-5'>池</b><b class='flag-5'>化</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>實(shí)踐</b>案例解析

    構(gòu)建便捷海外IP代理:策略與實(shí)踐

    構(gòu)建便捷海外IP代理是一個(gè)涉及多方面策略與實(shí)踐的過程。
    的頭像 發(fā)表于 11-14 07:34 ?446次閱讀
    主站蜘蛛池模板: 女女综合网 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 高清欧美日本视频免费观看 | 国产精品久久久久国产精品三级 | 天天操天天射天天色 | 午夜视频在线观看一区二区 | 亚洲欧美强伦一区二区另类 | 在线观看免费av网站 | 韩国三级无遮挡床戏视频 | 免费观看成年欧美1314www色 | 一女多夫嗯啊高h | 成人淫片| 中文字幕第13亚洲另类 | 色中射| 天天上天天干 | 国产精品久久久久久久免费大片 | 欧美人成在线观看 | 综合第一页 | 日本免费一区二区视频 | 国产在线播 | 午夜综合 | 夜夜操天天 | 成人免费看黄网站yyy456 | 欧亚激情偷乱人伦小说视频 | 亚洲国产一区二区三区a毛片 | 欧美一级视频在线高清观看 | 午夜在线播放视频 | 午夜在线观看免费高清在线播放 | 1024国产高清精品推荐 | 日韩午夜r电影在线观看 | 无遮挡一级毛片 | 国产成人a一区二区 | 免费欧美黄色片 | 视频免费在线观看 | 狠狠色噜噜狠狠狠狠888奇米 | 三级黄色片免费观看 | 亚洲精品久久久久久久蜜桃 | 68日本xxxxxxx18| 欧洲妇女成人淫片aaa视频 | 国产一级特黄生活片 | 亚洲视频一区在线 |