專利名稱:線程池容量自適應(yīng)調(diào)節(jié)方法及應(yīng)用服務(wù)器并發(fā)控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種線程池容量自適應(yīng)調(diào)節(jié)方法,以及一種應(yīng)用服務(wù)器并發(fā)控制方法,尤 其涉及一種通過非侵入的方式實(shí)現(xiàn)應(yīng)用服務(wù)器并發(fā)控制并提供自適應(yīng)的并發(fā)控制能力的 方法,屬于軟件技術(shù)領(lǐng)域。
背景技術(shù):
應(yīng)用服務(wù)器是面向Web計算環(huán)境的主流中間件平臺,它為企業(yè)級應(yīng)用的開發(fā)、部署、 運(yùn)行、集成和管理提供了良好的支撐平臺。作為Web計算環(huán)境下產(chǎn)生的新一代中間件,應(yīng) 用服務(wù)器解決了中間件在面向Internet的Web計算環(huán)境下遇到的問題,不僅具有傳統(tǒng)事務(wù)監(jiān) 控器的高可伸縮性、高可用性、高可靠性和高效等高級特性,而且為事務(wù)性Web應(yīng)用提供 一個跨平臺的運(yùn)行環(huán)境、 一系列通用服務(wù)以及相應(yīng)的工具集。
應(yīng)用服務(wù)器需要處理多用戶的請求調(diào)用,是典型的并發(fā)處理環(huán)境,利用請求并發(fā)執(zhí)行 的處理方式可以減少處理器的閑置時間,增加服務(wù)器吞吐量。并發(fā)是指兩個或者多個事件 在同一時間間隔內(nèi)發(fā)生,在單處理器單核環(huán)境下,多道程序交替執(zhí)行,在微觀上是交替和 順序的,在宏觀上,在一段時間間隔內(nèi)是同時的,稱之為并發(fā)程序。在多核、多CPU、或 者開放的分布式計算環(huán)境下,并發(fā)程序在多個處理器上同一時刻運(yùn)行,則可稱之為并行程 序。
并發(fā)程序的開發(fā)需要遵循一定的并發(fā)控制模型,目前應(yīng)用服務(wù)器主要采用線程/鎖 (Threads and Locks)模型(參見文獻(xiàn)Doug Lea, Douglas Lea, Concurrent Programming in Java. Second Edition: Design Principles and Patterns, Addison-Wesley Longman Publishing Co.,Inc.,Boston,MA,1999),即通過多線程處理多用戶請求。在該模型下,應(yīng)用服務(wù)器往往 通過線程池模式(請參見中國發(fā)明專利公開號說明書CN200410050035.2A)對并發(fā)資源(線 程)進(jìn)行重復(fù)利用,以節(jié)省線程在創(chuàng)建和銷毀時的服務(wù)器性能損耗,同時對并發(fā)資源加以 約束,防止由于線程不受限的增加而造成的系統(tǒng)性能下降。
目前,并發(fā)控制模型仍存在易用性問題,盡管線程/鎖模型是目前最廣為使用的并發(fā)控 制模型,但它仍是一個復(fù)雜的模型,應(yīng)用服務(wù)器的開發(fā)人員需考慮包括線程的分配時機(jī)、 并發(fā)任務(wù)的計劃和安排、鎖粒度的控制等問題??偠灾瑢τ诹?xí)慣于串行編程的開發(fā)人
員而言,并發(fā)編程是一項(xiàng)具有挑戰(zhàn)性的工作,而對于開發(fā)應(yīng)用服務(wù)器這類復(fù)雜系統(tǒng),其難 度之大更是一般開發(fā)人員無法勝任。
Rachid (Rachid Guerraoui, A Smooth Concurrency Revolution with Free Objects, IEEE Internet Computing, vol.11 , no.4, 2007, pp.82-85)提出Free Objects概念,即通過擴(kuò)展面 向?qū)ο缶幊谭妒綄?shí)現(xiàn)隱式并發(fā)編程,進(jìn)而降低并發(fā)程序的開發(fā)復(fù)雜度。Rachid的方法可歸 結(jié)為主動對象模式(R.Greg Lavender, Douglas C. Schmidt, Active object: an object behavioral pattern for concurrent programming, Pattern languages of program design 2, Addison-Wesley Longman Publishing Co., Inc., Boston, MA, 1996)的一種面向?qū)ο髮?shí)現(xiàn),在繼承面向?qū)?象編程范式特征(封裝性、繼承性、多態(tài)性)的同時,實(shí)現(xiàn)串行面向?qū)ο蟪绦蛳虿l(fā)程序 的自然轉(zhuǎn)換。以FreeObjects為代表的隱式并發(fā)編程是未來并發(fā)編程技術(shù)發(fā)展的趨勢,但與 以往的并發(fā)控制模型相比,該類方法仍是一種侵入式的實(shí)現(xiàn)方式,即系統(tǒng)與并發(fā)控制模型 之間存在耦合。
面向方面編程(Aspect oriented programming, AOP)技術(shù)(R. E. Filman, T. Elrad, S. Clarke: M. Aksit. Aspect-Oriented Software Development. Addison-Wesley, 2004.)為解決上述耦合問 題提供了可能,該技術(shù)旨在解決跨越多級無關(guān)聯(lián)對象模型的公共行為模塊化問題。具有橫 切特性的耦合點(diǎn)被稱為"橫切關(guān)注點(diǎn)"(crosscutting concerns)。 AOP通過定義切入點(diǎn) (pointcut)來描述系統(tǒng)"橫切關(guān)注點(diǎn)",通過定義通知(advice)實(shí)現(xiàn)橫切特性的邏輯功能, 并將非業(yè)務(wù)功能模塊以"方面(aspect)"的形式切入貫穿的無關(guān)的對象模型,在更高的抽象 和分解層次上實(shí)現(xiàn)解耦。J&g和Rachid (J6rg Kienzle and Rachid Guerraoui, AoP —doesit make sense the case of concurrency and failures. In 16th European Conference on Object Oriented Programming (ECOOP 2002), Lecture Notes in Computer Science 2374, Springer Verlag,pages 37-54, 2002)針對如何利用AOP技術(shù)實(shí)現(xiàn)并發(fā)控制進(jìn)行了探討,但他們的工 作側(cè)重于具有事務(wù)性的并發(fā)行為。
除了上述易用性問題,并發(fā)資源管理模式還存在自適應(yīng)性問題。由于網(wǎng)絡(luò)環(huán)境下用戶 行為存在不確定性,因此應(yīng)用服務(wù)器作為Internet環(huán)境下信息服務(wù)的運(yùn)行支撐平臺,其并 發(fā)資源的管理存在動態(tài)調(diào)整的需求,并且需要綜合考慮系統(tǒng)運(yùn)行的硬件環(huán)境、用戶訪問的 負(fù)載特征等多種因素。這一問題本質(zhì)上是系統(tǒng)配置的優(yōu)化問題。目前,管理人員往往需要 面對復(fù)雜的系統(tǒng)配置、性能優(yōu)化等問題,按照信息系統(tǒng)的發(fā)展趨勢,即使是經(jīng)驗(yàn)豐富、技 術(shù)熟練的管理人員也無法應(yīng)對下一代信息系統(tǒng)的復(fù)雜性,另一方面,系統(tǒng)部署量的增長也 將造成可勝任的管理人員的短缺。為解決這一位問題,Kephart(Kephart, J., Chess, D., The
vision of autonomic computing. IEEE Comput. 36(1), 41-50 2003)提出自主計算的概念,自主 系統(tǒng)參照自主神經(jīng)系統(tǒng)的自我調(diào)節(jié)機(jī)制,具有自配置、自優(yōu)化、自修復(fù)、自保護(hù)等自主特 征,使得信息系統(tǒng)在"整體上(holistic)"實(shí)現(xiàn)自我管理,最終實(shí)現(xiàn)系統(tǒng)管理成本的降低。
基于線程池的并發(fā)資源管理模式所存在的自適應(yīng)性問題可以通過自主計算的相關(guān)技術(shù) 解決,但如何實(shí)現(xiàn)非自主系統(tǒng)向自主或半自主系統(tǒng)的轉(zhuǎn)變?nèi)允抢_系統(tǒng)開發(fā)人員的難題, 對于無法獲得源代碼的系統(tǒng),無法在其基礎(chǔ)上擴(kuò)充自主系統(tǒng)的關(guān)鍵模塊,而對于組件間耦 合度較高的系統(tǒng),系統(tǒng)擴(kuò)充工作也很困難。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)中存在的問題,提供一種線程池容量自適應(yīng)調(diào)節(jié)方法 和一種非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法,將應(yīng)用服務(wù)器與并發(fā)控制模型解耦, 同時為應(yīng)用服務(wù)器提供自適應(yīng)的并發(fā)控制機(jī)制。
為了達(dá)到上述技術(shù)目的,本發(fā)明采用如下技術(shù)方案
一種非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法,包括以下各步驟
1) 構(gòu)造一個自適應(yīng)并發(fā)控制系統(tǒng);
2) 優(yōu)選使用AOP編程工具(比如AspectO構(gòu)造一個并發(fā)方面(Aspect)庫,定義抽象并 發(fā)方面和抽象并發(fā)任務(wù)處理類;
3) 基于并發(fā)方面庫和自適應(yīng)并發(fā)控制系統(tǒng),并根據(jù)應(yīng)用服務(wù)器的具體需求進(jìn)行并發(fā) 處理模塊的開發(fā);
4) 優(yōu)選使用AOP編程工具(比如AspectJ)進(jìn)行方面編織,將所述并發(fā)處理模塊植入原 應(yīng)用服務(wù)器系統(tǒng),生成新的應(yīng)用服務(wù)器系統(tǒng)。
上述非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法中,構(gòu)造一個自適應(yīng)并發(fā)控制系統(tǒng) 的方法為
1、 根據(jù)線程池模式構(gòu)造一個線程池;
2、 利用爬山算法,構(gòu)造一個自適應(yīng)的線程池動態(tài)調(diào)整方案,其步驟包括
1) 預(yù)定義線程池容量的最小值、調(diào)整時間間隔和超長任務(wù)執(zhí)行系數(shù);
2) 在預(yù)定義的時間間隔內(nèi),測量線程池的使用情況包括測量線程池內(nèi)所有活動線 程的執(zhí)行時間(ThreadsUsedTime);統(tǒng)計所有完成任務(wù)執(zhí)行的線程,得到的統(tǒng)計值稱為線程 使用量;并記錄任務(wù)完成數(shù)(CompletedTaskCount);
3) 根據(jù)上述步驟2)中所述活動線程的執(zhí)行時間和任務(wù)完成數(shù),計算 ThreadsUsedTime/CompletedTaskCount,即任務(wù)平均執(zhí)行時間,然后將任務(wù)平均執(zhí)行時間與 超長任務(wù)執(zhí)行系數(shù)相乘,獲得超長任務(wù)執(zhí)行時間。超長任務(wù)執(zhí)行時間表示任務(wù)執(zhí)行時間過 長的任務(wù),這一時間由超長任務(wù)執(zhí)行系數(shù)和任務(wù)平均執(zhí)行時間決定,并大于調(diào)整時間間隔。 接著統(tǒng)計活動線程執(zhí)行時間小于超長任務(wù)執(zhí)行時間的線程,稱之為健康線程數(shù)。統(tǒng)計健康 線程數(shù)的目的是為了排除超長任務(wù)的干擾,更準(zhǔn)確的預(yù)測下一時間間隔內(nèi)線程資源的使用 量;
4) 根據(jù)上述步驟3)中的評估進(jìn)行線程池容量的擇優(yōu)調(diào)整,若健康線程數(shù)大于線程 使用量,且等待隊(duì)列不為空,則表示下一時間間隔內(nèi)的線程需求可能大于目前的供給量, 將進(jìn)入如下子步驟,否則進(jìn)入步驟5);
(4.1) 記錄上一時間間隔的健康線程數(shù)和任務(wù)完成數(shù),并統(tǒng)計最大任務(wù)完成數(shù)及其 對應(yīng)的健康線程數(shù)。記錄上述數(shù)據(jù)的目的是為了給爬山算法進(jìn)行擇優(yōu)調(diào)整提供依據(jù);
(4.2) 利用爬山算法對步驟(4.1)記錄的若干歷史時間間隔數(shù)據(jù)進(jìn)行線程池容量的 擇優(yōu)調(diào)整。所述爬山算法是一種經(jīng)典的擇優(yōu)算法,可參見文獻(xiàn)Stuart J. Russell, Peter Norvig, Artificial intelligence: a modern approach, Prentice-Hall, Inc., Upper Saddle River, NJ, 1995;
5) 判斷是否進(jìn)行下一時間間隔的自適應(yīng)調(diào)整,若是則返回步驟2)繼續(xù)進(jìn)行動態(tài)調(diào) 整,否則自適應(yīng)并發(fā)控制系統(tǒng)將終止運(yùn)行。
上述非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法中,基于并發(fā)方面庫并根據(jù)應(yīng)用服
務(wù)器的具體需求進(jìn)行并發(fā)處理模塊開發(fā)的方法中包括以下步驟
1、 擴(kuò)展抽象并發(fā)方面;其步驟包括
1) 根據(jù)應(yīng)用服務(wù)器的具體需求切入點(diǎn)的定義和描述;
2) 定義around通知,對應(yīng)用服務(wù)器的并發(fā)請求進(jìn)行包裝;
3) 將上述包裝后的并發(fā)請求執(zhí)行邏輯提交給自適應(yīng)的并發(fā)控制系統(tǒng)執(zhí)行。
2、 擴(kuò)展抽象并發(fā)任務(wù)處理類,重載并發(fā)執(zhí)行方法,根據(jù)應(yīng)用服務(wù)器的具體需求進(jìn)行相 應(yīng)功能的增添。
和現(xiàn)有技術(shù)相比,本發(fā)明具有如下技術(shù)優(yōu)勢
1、 利用并發(fā)方面庫實(shí)現(xiàn)應(yīng)用服務(wù)器與并發(fā)控制模型的解耦,開發(fā)人員僅需對并發(fā)方 面進(jìn)行擴(kuò)展,從而降低了系統(tǒng)復(fù)雜度和開發(fā)、維護(hù)的難度。同時,由于并發(fā)控制模型與應(yīng) 用服務(wù)器解耦,開發(fā)人員可以根據(jù)實(shí)際需求替換并發(fā)控制機(jī)制,提高了系統(tǒng)靈活性。
2、 利用自適應(yīng)的并發(fā)控制機(jī)制,簡化了應(yīng)用服務(wù)器并發(fā)資源的管理和配置,優(yōu)化了
應(yīng)用服務(wù)器的性能。
3、本發(fā)明可為應(yīng)用服務(wù)器的設(shè)計和開發(fā)提供支持,可應(yīng)用于應(yīng)用服務(wù)器中的組件容 器(Web容器、EJB容器等)的并發(fā)控制模塊的設(shè)計和開發(fā)。
圖l本發(fā)明中非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法流程圖。 圖2應(yīng)用服務(wù)器植入自適應(yīng)并發(fā)控制系統(tǒng)后處理客戶端請求的示例圖。 圖3自適應(yīng)線程池動態(tài)調(diào)整流程圖。
圖4利用AOP編程工具構(gòu)造的并發(fā)方面庫以及簡單Java應(yīng)用服務(wù)器相關(guān)的并發(fā)控制
模塊示例圖。
具體實(shí)施例方式
以下結(jié)合具體實(shí)施例和附圖對本發(fā)明進(jìn)行詳細(xì)說明。
本實(shí)施例提出一種非侵入式、自適應(yīng)的應(yīng)用服務(wù)器并發(fā)控制方法。作為本實(shí)施例方法 的使用環(huán)境,所述應(yīng)用服務(wù)器采用一個簡單的Java應(yīng)用服務(wù)器,其示例代碼內(nèi)容如代碼l 所示
代碼1:
1 cl鵬SimpleServer(
2 public void handleSocket(Socket s){
3 InputStream in = s.getlnputStread();
4 …〃處理socket連接
5 }
6 public void serverStart()(
7 socket = serverSocket.accept(》
8 handleSocket (socket)^
9 }
10 }
在上述代碼l中,SimpleServer類實(shí)現(xiàn)了一個簡單Java應(yīng)用服務(wù)器,用以處理客戶端的
Socket連接,它包含一個服務(wù)器啟動方法(第6-9行)用以啟動應(yīng)用服務(wù)器,以及一個Socket 請求處理方法(第2-5行),服務(wù)器通過啟動方法啟動后對Socket端口進(jìn)行監(jiān)聽(第7行), 并通過Socket請求處理方法對Socket請求進(jìn)行處理(第8行)。
由于需要多個客戶端的并發(fā)請求,因此需要利用并發(fā)控制模型對多個客戶端的Socket 連接進(jìn)行并發(fā)處理。目前應(yīng)用服務(wù)器主要采用線程/鎖模型,傳統(tǒng)的侵入式方法(代碼2) 需要利用該并發(fā)控制模型對簡單Java應(yīng)用服務(wù)器(代碼l)進(jìn)行重構(gòu),為每個Socket連接創(chuàng) 建一個線程,從而實(shí)現(xiàn)并發(fā)處理(第8-12行)。
代碼2:
1class SimpleServer{
2 public void handleSocket (Socket s){
3 InputStream in = s.getInputStread();
4 …//處理socket連接
5 }
6 public void serverStartO{
7 socket = serverSocket.accept();
8 new Thread(new Runnable() {
9 public void run(){
10 handleSocket (socket);
11 }
12 }
13 }
14 }
本實(shí)施例方法則實(shí)現(xiàn)了應(yīng)用服務(wù)器和并發(fā)控制模型之間的解耦,其流程如圖l所示
1.在應(yīng)用服務(wù)器中構(gòu)造自適應(yīng)并發(fā)控制系統(tǒng),本實(shí)施例是針對線程池模式采用爬山算
法構(gòu)造線程池的動態(tài)調(diào)整方案,其步驟包括
(1) 根據(jù)線程池模式構(gòu)造一個線程池;
(2) 利用爬山算法,構(gòu)造一個自適應(yīng)的線程池動態(tài)調(diào)整方案,使該線程池具有自適應(yīng) 的動態(tài)調(diào)整能力。
本實(shí)施例的自適應(yīng)并發(fā)控制系統(tǒng)由資源監(jiān)控器、資源評估器、資源管理器和線程池四 部分組成,是應(yīng)用服務(wù)器并發(fā)資源管理的基礎(chǔ)部分。其中,資源監(jiān)控器負(fù)責(zé)線程池使用情
況的監(jiān)測和數(shù)據(jù)統(tǒng)計;資源評估器負(fù)責(zé)進(jìn)行線程池未來使用情況的評估和預(yù)測;資源管理 器負(fù)責(zé)線程池容量的動態(tài)調(diào)整;線程池負(fù)責(zé)對線程資源進(jìn)行池化管理,其構(gòu)造方法可參見 中國發(fā)明專利公開號說明書CN 200410050035.2A。圖2是自適應(yīng)并發(fā)控制系統(tǒng)植入應(yīng)用服 務(wù)器后的請求處理示例圖。
其中,上述步驟(2)所述構(gòu)造自適應(yīng)的線程池動態(tài)調(diào)整方案的流程,如圖3所示 首先預(yù)定義線程池容量的最小值、調(diào)整時間間隔,在預(yù)定義的時間間隔內(nèi),測量線程 池內(nèi)所有活動線程的執(zhí)行時間,并針對任務(wù)執(zhí)行結(jié)束的線程使用量進(jìn)行統(tǒng)計,同時記錄任 務(wù)完成數(shù);根據(jù)活動線程執(zhí)行時間和任務(wù)完成數(shù),計算超長任務(wù)執(zhí)行時間,統(tǒng)計活動線程 執(zhí)行時間小于超長任務(wù)執(zhí)行時間的線程,稱之為健康線程數(shù),并以此作為下一時間間隔內(nèi) 線程池容量的評估依據(jù),若健康線程數(shù)大于線程使用量,且等待隊(duì)列不為空,則記錄上一 時間間隔的健康線程數(shù)和任務(wù)完成數(shù),并利用爬山算法進(jìn)行線程池容量的擇優(yōu)調(diào)整,否則 不需調(diào)整。由于客戶端的負(fù)載是隨時變化的,因此上述調(diào)整過程將持續(xù)進(jìn)行直至系統(tǒng)終止。 值得說明的是,本實(shí)施例采用爬山算法(:參見文獻(xiàn)Stuart J. Russell , Peter Norvig, Artificial intelligence: a modern approach, Prentice-Hall, Inc., Upper Saddle River, NJ, 1995)構(gòu) 造自適應(yīng)線程池動態(tài)調(diào)整方案,是一種局部擇優(yōu)的方法,是對深度優(yōu)先搜索的一種改進(jìn), 它利用反饋信息幫助生成解的決策。除此之外,還可以采用別的方式構(gòu)造自適應(yīng)的線程池 調(diào)整方案。
2.利用AOP編程工具構(gòu)造一個并發(fā)方面庫,定義抽象并發(fā)方面和抽象并發(fā)任務(wù)處理
類;
本實(shí)施例通過AOP編程工具AspectJ (Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William G. Griswold. An overview of Aspect! Lecture Notes in Computer Science,2072:327-355, 2001.)構(gòu)造并發(fā)方面庫,在該并發(fā)方面庫中,定義了一個 抽象并發(fā)處理類(AbstractRequestHandleWork)用于處理客戶請求的并發(fā)任務(wù),以及一個 抽象并發(fā)方面(AbstractRequestHandlerAspect),用于聲明抽象切入點(diǎn),如圖4所示。當(dāng)然 采用其它的AOP編程工具也可以達(dá)到本發(fā)明目的。
其中,抽象并發(fā)處理類(AbstractRequestHandleWork)(代碼3)利用Java語言中的線程 模型實(shí)現(xiàn)Runnable接口 (第l行),聲明了一個抽象請求處理方法(第2行),并在并發(fā)運(yùn)行 方法中給出了一個缺省的實(shí)現(xiàn),即直接執(zhí)行抽象請求處理方法(第3-5行)。
代碼3:
1 public abstract class AbstractRequestHandleWork implements Runnable {
2 public abstract Object handleRequest();
3 public void run() {
4 handleRequest();
5 }
6 }
抽象并發(fā)方面(AbstractRequestHandlerAspect)(代碼4)聲明了一個抽象切入點(diǎn)用以 捕獲請求處理(第2行)。
代碼4:
1 public abstract aspect AbstractRequestHandlerAspect {
2 public abstract pointcut request();
3 }
3.基于并發(fā)方面庫和自適應(yīng)并發(fā)控制系統(tǒng),根據(jù)應(yīng)用服務(wù)器的具體需求進(jìn)行并發(fā)處理 模塊的開發(fā);
如圖4所示,針對上述簡單Java應(yīng)用服務(wù)器,本實(shí)施例基于并發(fā)方面庫,定義了本實(shí)施 例簡單Java應(yīng)用服務(wù)器的相關(guān)并發(fā)處理模塊,包括Socket處理任務(wù)類(SocketHandleWork), 用于在簡單Java應(yīng)用服務(wù)器中處理Socket連接的并發(fā)任務(wù),以及Socket處理方面 (SocketHandlerAspect),用于根據(jù)簡單Java應(yīng)用服務(wù)器的具體情況,定義切入點(diǎn),并定義通 知執(zhí)行邏輯,實(shí)現(xiàn)對切入點(diǎn)的并發(fā)控制。
Socket處理任務(wù)類(SocketHandleWork)(代碼5)繼承了并發(fā)方面庫中的抽象并發(fā)處理類 (AbstractRequestHandleWork),并在并發(fā)運(yùn)行方法中給出了一個擴(kuò)展實(shí)現(xiàn)(第3-7行),即 在執(zhí)行抽象請求處理方法的前后增加上下文處理、生命周期管理以及監(jiān)控等功能。
代碼S:
1
2
4
public abstract Object handleRequest(); public void run() {
…〃處理上下文、生命周期管理、監(jiān)控等
5 handleRequest();
6 …//處理上下文、生命周期管理、監(jiān)控等
7 }
8 }
Socket處理方面(SocketHandlerAspect)(代碼6)繼承了并發(fā)方面庫中的抽象并發(fā)方面 (AbstractRequestHandlerAspect),并針對簡單Java應(yīng)用服務(wù)器對抽象切入點(diǎn)進(jìn)行了具體定 義(第2行),即對簡單Java應(yīng)用服務(wù)器的Socekt請求處理方法調(diào)用進(jìn)行攔截。同時,定義 了通知,即在捕獲到切入點(diǎn)時,對其方法調(diào)用進(jìn)行包裝(第3-8行),實(shí)現(xiàn)并發(fā)控制。在本 實(shí)施例中,通過具有自適應(yīng)性的線程池來實(shí)現(xiàn)并發(fā)控制(第9、 IO行)。
代碼6:
1 public aspect SocketHandlerAspect extends AbstractRequestHandlerAspect {
2 public pointcut request ():call(void SimpleServer.handleSocket());
3 Object around(): request (){
4 SocketHandleWork work = new SocketHandleWork () {
5 public Object handleRequest () {
6 return proceed(
7 }
8 };
9 AdaptiveThreadPool.getInstance(),run(work);
10 return work;
11 }
12 }
4.運(yùn)行AOP編程工具,進(jìn)行方面編織,將上述并發(fā)控制代碼植入原應(yīng)用服務(wù)器系統(tǒng), 生成新的應(yīng)用服務(wù)器系統(tǒng)。
權(quán)利要求
1.一種線程池容量自適應(yīng)調(diào)節(jié)方法,包括下列步驟 1).預(yù)定義線程池容量的最小值、調(diào)整時間間隔以及超長任務(wù)執(zhí)行系數(shù); 2).在各個時間間隔內(nèi),測量線程池內(nèi)所有活動線程的執(zhí)行時間,統(tǒng)計線程使用量,并記錄任務(wù)完成數(shù);根據(jù)所述活動線程的執(zhí)行時間和任務(wù)完成數(shù),計算超長任務(wù)執(zhí)行時間; 3).統(tǒng)計健康線程數(shù),若健康線程數(shù)大于所述線程使用量,且等待隊(duì)列不為空,則利用爬山算法調(diào)整線程池容量,否則進(jìn)入下一個時間間隔的處理。
2. —種應(yīng)用服務(wù)器并發(fā)控制方法,包括下列步驟a) .構(gòu)造自適應(yīng)并發(fā)控制系統(tǒng),所述系統(tǒng)按照權(quán)利要求l所述的方法自適應(yīng)調(diào)節(jié)其線程池容量;b) .構(gòu)造并發(fā)方面庫,定義抽象并發(fā)方面和抽象并發(fā)任務(wù)處理類;C).基于所述自適應(yīng)并發(fā)控制系統(tǒng)和所述并發(fā)方面庫,根據(jù)應(yīng)用服務(wù)器的具體需求開發(fā)并發(fā)處理模塊; d).進(jìn)行方面編織,將所述并發(fā)處理模塊植入應(yīng)用服務(wù)器。
3. 如權(quán)利要求2所述的方法,其特征在于,步驟a)所述自適應(yīng)并發(fā)控制系統(tǒng)包括資源評估 器、資源監(jiān)控器、資源管理器和線程池,其中資源評估器負(fù)責(zé)進(jìn)行線程池未來使用情況的評估和預(yù)測; 資源監(jiān)控器負(fù)責(zé)線程池使用情況的監(jiān)測和數(shù)據(jù)統(tǒng)計; 資源管理器負(fù)責(zé)線程池容量的動態(tài)調(diào)整; 線程池負(fù)責(zé)對線程資源進(jìn)行池化管理。
4. 如權(quán)利要求2所述的方法,其特征在于,步驟b)所述并發(fā)方面庫通過AOP編程工具構(gòu)造。
5. 如權(quán)利要求2所述的方法,其特征在于,步驟c)所述并發(fā)處理模塊通過下述方法開發(fā)i. 根據(jù)應(yīng)用服務(wù)器的具體需求定義切入點(diǎn)和around通知,包裝所述應(yīng)用服務(wù)器的 并發(fā)請求,并將包裝后的并發(fā)請求提交給所述自適應(yīng)并發(fā)控制系統(tǒng)執(zhí)行;ii. 擴(kuò)展抽象并發(fā)任務(wù)處理類,重載并發(fā)執(zhí)行方法,根據(jù)應(yīng)用服務(wù)器的具體需求增 添功能。
6. 如權(quán)利要求2所述的方法,其特征在于,步驟d)采用AOP編程工具進(jìn)行方面編織。
7. 如權(quán)利要求4或6所述的方法,其特征在于,所述AOP編程工具為AspectJ。
全文摘要
本發(fā)明公開了一種線程池容量自適應(yīng)調(diào)節(jié)方法,以及一種應(yīng)用服務(wù)器并發(fā)控制方法,屬于軟件技術(shù)領(lǐng)域。所述線程池容量自適應(yīng)調(diào)節(jié)方法主要通過爬山算法實(shí)現(xiàn);所述應(yīng)用服務(wù)器并發(fā)控制方法包括根據(jù)所述線程池容量自適應(yīng)調(diào)節(jié)方法構(gòu)造自適應(yīng)并發(fā)控制系統(tǒng);構(gòu)造并發(fā)方面庫,定義抽象并發(fā)方面和抽象并發(fā)任務(wù)處理類;基于所述自適應(yīng)并發(fā)控制系統(tǒng)和所述并發(fā)方面庫,根據(jù)應(yīng)用服務(wù)器的具體需求開發(fā)并發(fā)處理模塊;進(jìn)行方面編織,將所述并發(fā)處理模塊植入應(yīng)用服務(wù)器。本發(fā)明實(shí)現(xiàn)了應(yīng)用服務(wù)器與并發(fā)控制模型之間的解耦,同時為應(yīng)用服務(wù)器提供了自適應(yīng)的并發(fā)控制機(jī)制。
文檔編號G06F9/46GK101364185SQ20081011928
公開日2009年2月11日 申請日期2008年9月2日 優(yōu)先權(quán)日2008年9月2日
發(fā)明者張文博, 偉 王, 華 鐘, 峻 魏, 濤 黃 申請人:中國科學(xué)院軟件研究所