本技術(shù)涉及計(jì)算機(jī),特別是涉及一種線程池管理方法、裝置、設(shè)備及介質(zhì)。
背景技術(shù):
1、隨著軟件系統(tǒng)的日益復(fù)雜和并發(fā)需求的增加,傳統(tǒng)的單線程或簡(jiǎn)單多線程管理方式已經(jīng)無(wú)法滿足高效、可擴(kuò)展且資源利用率高的需求。而線程池通過(guò)復(fù)用線程、減少線程創(chuàng)建和銷(xiāo)毀的開(kāi)銷(xiāo),以及更好地管理線程和任務(wù)執(zhí)行,顯著提高了軟件系統(tǒng)的響應(yīng)速度和資源利用率。
2、相關(guān)技術(shù)中,在java中可以通過(guò)threadpool?executor類創(chuàng)建線程池,它提供了豐富的參數(shù)配置,如核心線程數(shù)、最大線程數(shù)、線程存活時(shí)間、任務(wù)隊(duì)列等,允許開(kāi)發(fā)者根據(jù)具體需求靈活調(diào)整線程池的行為。然而,雖然thread?pool?executor功能強(qiáng)大,但直接使用時(shí)可能存在多個(gè)線程池未集中管理的問(wèn)題,導(dǎo)致難以監(jiān)控和維護(hù)。在spring框架中,@async注解提供了一種便捷的方式來(lái)創(chuàng)建和管理異步任務(wù),但這些任務(wù)通常使用spring默認(rèn)的線程池或者開(kāi)發(fā)者指定的公共線程池來(lái)執(zhí)行。這雖然簡(jiǎn)化了異步任務(wù)的創(chuàng)建,但在面對(duì)多種不同業(yè)務(wù)場(chǎng)景時(shí),可能無(wú)法滿足特定的線程池配置需求。
3、因此,無(wú)論是直接使用threadpool?executor還是通過(guò)spring的@async注解來(lái)創(chuàng)建和管理線程池,都容易出現(xiàn)多個(gè)線程池未集中管理的問(wèn)題,尤其是在大型軟件系統(tǒng)中,可能會(huì)存在資源分配不均、出現(xiàn)性能瓶頸并難以維護(hù)和調(diào)試等問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、基于上述問(wèn)題,本技術(shù)提供了一種線程池管理方法、裝置、設(shè)備及介質(zhì),能夠在規(guī)避了多個(gè)線程池分散配置、資源分配不均、難以追蹤的問(wèn)題的同時(shí),優(yōu)化資源分配,避免資源浪費(fèi)和性能瓶頸,且通過(guò)對(duì)線程池進(jìn)行監(jiān)控,避免問(wèn)題的擴(kuò)大和線程池的崩潰。
2、本技術(shù)實(shí)施例公開(kāi)了如下技術(shù)方案:
3、第一方面,本技術(shù)公開(kāi)了一種線程池管理方法,所述方法包括:
4、創(chuàng)建線程池業(yè)務(wù)表,所述線程池業(yè)務(wù)表包括至少一種線程參數(shù),所述線程參數(shù)包括線程池名稱、核心線程數(shù)量、最大線程數(shù)量和線程空閑存活時(shí)間,所述線程參數(shù)的值實(shí)時(shí)更新;
5、通過(guò)讀取所述線程池業(yè)務(wù)表中的所述線程參數(shù)的值,動(dòng)態(tài)創(chuàng)建至少一個(gè)線程池;
6、通過(guò)對(duì)所述線程池進(jìn)行監(jiān)控,得到所述線程池的當(dāng)前運(yùn)行狀態(tài);
7、當(dāng)所述當(dāng)前運(yùn)行狀態(tài)滿足預(yù)設(shè)的告警條件時(shí),觸發(fā)告警指示。
8、可選地,所述通過(guò)對(duì)所述線程池進(jìn)行監(jiān)控,得到所述線程池的當(dāng)前運(yùn)行狀態(tài),包括:
9、定期收集或?qū)崟r(shí)收集所述線程池的運(yùn)行數(shù)據(jù),所述運(yùn)行數(shù)據(jù)包括所述線程池中的線程數(shù)量、任務(wù)隊(duì)列長(zhǎng)度、已完成任務(wù)數(shù)量和拒絕任務(wù)數(shù)量中的至少一種;
10、通過(guò)分析所述運(yùn)行數(shù)據(jù),得到所述線程池的當(dāng)前運(yùn)行狀態(tài),所述當(dāng)前運(yùn)行狀態(tài)包括所述線程池的負(fù)載情況、線程利用率和是否達(dá)到所述線程池的配置上限中的至少一種。
11、可選地,所述當(dāng)前運(yùn)行狀態(tài)包括隊(duì)列積壓任務(wù)數(shù);
12、所述當(dāng)所述當(dāng)前運(yùn)行狀態(tài)滿足預(yù)設(shè)的告警條件時(shí),觸發(fā)告警指示,包括:
13、當(dāng)所述線程池的隊(duì)列積壓任務(wù)數(shù)大于預(yù)設(shè)積壓閾值時(shí),觸發(fā)告警指示。
14、可選地,所述當(dāng)前運(yùn)行狀態(tài)包括所述線程池的已執(zhí)行任務(wù)數(shù)和未執(zhí)行任務(wù)數(shù);所述方法還包括:
15、根據(jù)所述已執(zhí)行任務(wù)數(shù)和所述未執(zhí)行任務(wù)數(shù),更新所述線程池業(yè)務(wù)表中的線程參數(shù)的值。
16、可選地,在執(zhí)行所述動(dòng)態(tài)創(chuàng)建至少一個(gè)線程池之后,所述方法還包括:
17、為每個(gè)所述線程池分配一個(gè)唯一的標(biāo)識(shí);
18、將所述線程池的所述標(biāo)識(shí)和所述線程參數(shù)的值保存至內(nèi)存中,以通過(guò)所述標(biāo)識(shí)在所述內(nèi)存中獲取與所述標(biāo)識(shí)對(duì)應(yīng)的所述線程參數(shù)的值。
19、第二方面,本技術(shù)實(shí)施例公開(kāi)了一種線程池管理裝置,所述裝置包括:業(yè)務(wù)表創(chuàng)建模塊、線程池創(chuàng)建模塊、狀態(tài)獲取模塊和告警指示模塊;
20、所述業(yè)務(wù)表創(chuàng)建模塊,用于創(chuàng)建線程池業(yè)務(wù)表,所述線程池業(yè)務(wù)表包括至少一種線程參數(shù),所述線程參數(shù)包括線程池名稱、核心線程數(shù)量、最大線程數(shù)量和線程空閑存活時(shí)間,所述線程參數(shù)的值實(shí)時(shí)更新;
21、所述線程池創(chuàng)建模塊,用于通過(guò)讀取所述線程池業(yè)務(wù)表中的所述線程參數(shù)的值,動(dòng)態(tài)創(chuàng)建至少一個(gè)線程池;
22、所述狀態(tài)獲取模塊,通過(guò)對(duì)所述線程池進(jìn)行監(jiān)控,得到所述線程池的當(dāng)前運(yùn)行狀態(tài);
23、所述告警指示模塊,用于當(dāng)所述當(dāng)前運(yùn)行狀態(tài)滿足預(yù)設(shè)的告警條件時(shí),觸發(fā)告警指示。
24、可選地,所述狀態(tài)獲取模塊包括:第一獲取模塊和第二獲取模塊;
25、所述第一獲取模塊,用于定期收集或?qū)崟r(shí)收集所述線程池的運(yùn)行數(shù)據(jù),所述運(yùn)行數(shù)據(jù)包括所述線程池中的線程數(shù)量、任務(wù)隊(duì)列長(zhǎng)度、已完成任務(wù)數(shù)量和拒絕任務(wù)數(shù)量中的至少一種;
26、所述第二獲取模塊,用于通過(guò)分析所述運(yùn)行數(shù)據(jù),得到所述線程池的當(dāng)前運(yùn)行狀態(tài),所述當(dāng)前運(yùn)行狀態(tài)包括所述線程池的負(fù)載情況、線程利用率和是否達(dá)到所述線程池的配置上限中的至少一種。
27、可選地,所述當(dāng)前運(yùn)行狀態(tài)包括隊(duì)列積壓任務(wù)數(shù);
28、所述告警指示模塊具體用于:當(dāng)所述線程池的隊(duì)列積壓任務(wù)數(shù)大于預(yù)設(shè)積壓閾值時(shí),觸發(fā)告警指示。
29、可選地,所述當(dāng)前運(yùn)行狀態(tài)包括所述線程池的已執(zhí)行任務(wù)數(shù)和未執(zhí)行任務(wù)數(shù);所述裝置還包括:參數(shù)更新模塊;
30、所述參數(shù)更新模塊,用于根據(jù)所述已執(zhí)行任務(wù)數(shù)和所述未執(zhí)行任務(wù)數(shù),更新所述線程池業(yè)務(wù)表中的線程參數(shù)的值。
31、可選地,所述裝置還包括:標(biāo)識(shí)分配模塊、參數(shù)獲取模塊;
32、所述標(biāo)識(shí)分配模塊,用于為每個(gè)所述線程池分配一個(gè)唯一的標(biāo)識(shí);
33、所述參數(shù)獲取模塊,用于將所述線程池的所述標(biāo)識(shí)和所述線程參數(shù)的值保存至內(nèi)存中,以通過(guò)所述標(biāo)識(shí)在所述內(nèi)存中獲取與所述標(biāo)識(shí)對(duì)應(yīng)的所述線程參數(shù)的值。
34、第三方面,本技術(shù)公開(kāi)了一種線程池管理設(shè)備,所述設(shè)備包括:存儲(chǔ)器和處理器;
35、所述存儲(chǔ)器,用于存儲(chǔ)程序;
36、所述處理器,用于執(zhí)行所述程序,實(shí)現(xiàn)如第一方面所述的線程池管理方法的各個(gè)步驟。
37、第四方面,本技術(shù)公開(kāi)了一種計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)如第一方面所述的線程池管理方法的各個(gè)步驟。
38、相較于現(xiàn)有技術(shù),本技術(shù)具有以下有益效果:
39、本技術(shù)實(shí)施例提供了一種線程池管理方法、裝置、設(shè)備及介質(zhì),該方法包括:創(chuàng)建線程池業(yè)務(wù)表,線程池業(yè)務(wù)表包括至少一種線程參數(shù),線程參數(shù)包括線程池名稱、核心線程數(shù)量、最大線程數(shù)量和線程空閑存活時(shí)間,線程參數(shù)的值實(shí)時(shí)更新;通過(guò)讀取線程池業(yè)務(wù)表中的線程參數(shù)的值,動(dòng)態(tài)創(chuàng)建至少一個(gè)線程池;通過(guò)對(duì)線程池進(jìn)行監(jiān)控,得到線程池的當(dāng)前運(yùn)行狀態(tài);當(dāng)當(dāng)前運(yùn)行狀態(tài)滿足預(yù)設(shè)的告警條件時(shí),觸發(fā)告警指示。由此,本技術(shù)通過(guò)引入線程池業(yè)務(wù)表實(shí)現(xiàn)了對(duì)所有線程池的集中管理,使得管理員能夠獲取每個(gè)線程池的配置信息,從而規(guī)避了多個(gè)線程池分散配置、資源分配不均、難以追蹤的問(wèn)題。并且,線程池業(yè)務(wù)表中的參數(shù)值支持實(shí)時(shí)更新,這意味著可以根據(jù)實(shí)際運(yùn)行情況和業(yè)務(wù)需求動(dòng)態(tài)地調(diào)整線程池的配置并創(chuàng)建至少一個(gè)線程池,從而有助于優(yōu)化資源分配,避免資源浪費(fèi)和性能瓶頸。進(jìn)一步地,本技術(shù)還能夠?qū)崟r(shí)獲取線程池的當(dāng)前運(yùn)行狀態(tài)。當(dāng)當(dāng)前運(yùn)行狀態(tài)達(dá)到預(yù)設(shè)的告警條件時(shí)會(huì)觸發(fā)告警指示,從而有助于及時(shí)發(fā)現(xiàn)潛在問(wèn)題,并采取相應(yīng)的措施進(jìn)行處理,避免問(wèn)題的擴(kuò)大和線程池的崩潰。