一種資源管理器的資源調度方法
【專利摘要】本發明提供了資源管理器資源調度方法,包括:A、訪問資源池請求資源:若資源池有資源,獲取資源;否則進入下一步;B、訪問緩存資源池請求資源:若緩存資源池有資源,獲取資源;否則進入下一步;C、判斷資源池資源量是否小于設定量:若是,創建并獲取新資源;否則將請求加入緩沖隊列;D、判斷緩沖隊列是否達到最大量;若達最大量,拒絕請求;否則進入下一步;E、通過緩沖隊列訪問緩存資源池請求資源:若緩存資源池有資源,獲取資源;否則進入下一步;F、判斷緩存資源池資源量是否小于設定量:若是,創建并獲取新資源;否則根據緩沖隊列大小,對應增減緩存資源池設定量并返回步驟E。以上方法解決了現有資源管理器資源調度方法存在的問題。
【專利說明】一種資源管理器的資源調度方法
【技術領域】
[0001] 本發明涉及一種資源管理器的資源調度方法。
【背景技術】
[0002] 在現有技術中,資源管理器從固定了邊界值的資源池中通過未加鎖資源隊列或者 創建資源的方式獲取資源。當資源請求過多時,資源管理器通過線程阻塞或者請求排隊的 方式等待空閑資源。
[0003] 上述現有技術存在以下問題:
[0004] 1.由于設定了固定邊界值的資源池,這樣,在被監控的閑置資源閑置一定時間后, 會被移出資源池。此時,當對資源的請求超過空閑資源時,需要再次創建資源,由此耗費更 多的時間。
[0005] 2.使用了線程阻塞或請求排隊的方式,等待時間不可預見。當出現資源被長時間 占用的情況下,會導致任何請求都得不到相應反饋的情況,即系統無響應。
[0006] 3.當對資源的請求出現高峰時,會由于資源池邊界大小、邊界生存時間、邊界超時 時間等設定,造成設備利用效率不高,性能無法全部發揮出來。
[0007] 4.對于設定了緩存資源池的資源管理器的資源獲取方法而言,能夠根據當前對資 源請求的多少動態設定資源池的各臨界值,用以提高設備利用效率,提高性能。但由此建立 的緩存對象依然處于當前資源池內,且依賴于當前資源池的限制,使用起來靈活性較差。
【發明內容】
[0008] 有鑒于此,本發明的主要目的在于提供一種資源管理器的資源調度方法,以解決 上述問題。
[0009] 本發明提供的一種資源管理器的資源調度方法,包括以下步驟:
[0010] A、訪問資源池,請求獲取資源:如果資源池中未加鎖的資源集合中存在資源,則直 接獲取資源;否則,進入下一步驟;
[0011] B、訪問緩存資源池,請求獲取資源:如果緩存資源池的未加鎖資源集合中存在資 源,則直接獲取資源;否則,進入下一步驟;
[0012] C、判斷資源池中的資源數量是否小于資源池的設定容量:如果小于,則創建并獲 取新資源;否則,將當前獲取資源的請求加入請求緩沖隊列;
[0013] D、判斷請求緩沖隊列是否達到最大容量;如果達到最大容量,則拒絕該請求,即中 斷本次資源獲取;否則,進入下一步驟;
[0014] E、通過所述請求緩沖隊列訪問緩存資源池,請求獲取資源:如果緩存資源池的未 加鎖資源集合中存在資源,則直接獲取資源;否則,進入下一步驟;
[0015] F、判斷緩存資源池中的資源數量是否小于緩存資源池的設定容量:如果小于,則 創建并獲取新資源;否則,根據所述請求緩沖隊列的大小,對應增減緩存資源池的設定容 量,然后返回上述步驟E。
[0016] 在上述的方法中,步驟F后還包括以下步驟:
[0017] G、驗證使用過的資源的有效性,將有效的資源放回到所述資源池,銷毀掉無效的 資源。
[0018] 在上述的方法中,訪問所述資源池、所述緩存資源池時,從中掃描出空閑時間超過 設定存活時間最大值的資源,將這些資源從所述資源池、所述緩存資源池中移出并銷毀。
[0019] 由上可以看出,當無法從資源池直接獲取資源時:
[0020] 1.本發明方法首先考慮訪問諸如二級緩存資源池這樣的緩存資源池,而不是選擇 阻塞或加入排隊,由此可避免阻塞引起的系統無響應問題。
[0021] 2.請求緩沖隊列不與固定邊界的資源池進行任意直接交互,而僅與邊界值可以動 態調整的緩存資源池進行交互。這樣,不會像資源池那樣受固定邊界的限制而需要經常移 出閑置資源,而在請求緩沖隊列提出請求時經常重新創建資源,由此縮短了資源獲取時間。
[0022] 3.在每次訪問請求緩沖隊列時,都要掃描請求緩沖隊列的容量大小,以根據請求 緩沖隊列的實時容量動態調整緩存資源池容量以及緩存資源池中資源存活時間最大值。也 就是說,根據資源請求的增減,相應地增/減緩存資源池容量或相應地減/增緩存資源池中 資源存活時間最大值,以進一步降低對設備資源的占用和消耗。
【專利附圖】
【附圖說明】
[0023] 圖1為本發明提供的資源管理器的資源調度方法的流程圖。
【具體實施方式】
[0024] 首先,交代一下本發明方法實施過程的偽代碼(Pseudocode),其中的各參數說明 如下:
[0025] POOL:資源池;
[0026] UNLOCKED :資源池中未加鎖的資源集合;
[0027] LOCKED :資源池中加鎖的資源集合;
[0028] P00L_MAX :資源池的設定容量(相當于UNL0CKED+L0CKED);
[0029] P00L_CACHE :緩存資源池;
[0030] UNL0CKED_CACHE :緩存資源池中未加鎖的資源集合;
[0031] L0CKED_CACHE :緩存資源池中加鎖的資源集合;
[0032] P00L_CACHE_MAX :緩存資源池的設定容量(相當于 UNL0CKED_CACHE+L0CKED_ CACHE);
[0033] QUEUE :請求緩沖隊列;
[0034] QUEUE_MAX :請求緩沖隊列的設定容量;
[0035] KEEPALIVEHME :資源池的未加鎖資源集合中的資源存活最大時間;
[0036] --ΜΕΟυΤ--ΜΕ :資源池的加鎖資源集合中的資源存活最大時間;
[0037] KEEPALIVEHME_CACHE :緩存資源池的未加鎖資源集合中的資源存活最大時間;
[0038] HME0UmME_CACHE :緩存資源池的加鎖資源集合中的資源存活最大時間。
[0039] synchronized ? l if(UKLOCKED>0) //資源池中未加鎖的資源集合中存在資源 { return UNLOCKED[i] //直接獲取資源 } else ir(UNLOCKED + LOCKED < POOL-MAX) //判斷資源池中 的資源數量(資源池中未加鎖的資源集合與加鎖的資源集合之和)是 否小于資源池的設定容量 ? ii、(UNLOCKED-CACHE > 0) //判斷緩存資源池的未加鎖資源集 合中存在資源; / return UNLOCKED-CACHE[i], //直接獲取資源; } else { return POOL.createRes; //創建并獲取新資源; LOCKED++; } } else { joinQueue;//將當前獲取資源的請求加入請求緩沖隊列,但并沒 有放棄CPU使用權(或者說并沒有加入排隊), if(currQueue > QUEUE_MAX) //判斷請求緩沖隊列是否達到最大
[0040] 容量 { return, null;//駁回請求 } step 1: if(UNLOCKED_CACHE > 0) //通過所述請求緩沖隊列訪 問緩存資源池,判斷緩存資源池的未加鎖資源集合中存在資源; { return UNLOCKED-CACHE[i]; /7直接獲取資源 } else if(LOCKED-CACHE + UNLOCKED_CACHE < POOL_CACHE_MAX) //判斷緩存資源池中的資源數量(緩存資源池 中未加銷的資源集合與加鎖的資源集合之和)是否小于緩存資源池的 設定容量; { return POOL_CACHE.createRes; //創建并獲取新資源 LOCKED CACHE++; } else { CHANGECACHE: function { POOL-CACHE MAX = POOL-CACHE MAX M廣展系數; waitCriMEOUTTIME_CACHE);//手動加入排隊,等待喚醒(注: 此處出現的加入排隊的幾率很小,即在資源池和緩存資源池不斷釋放 資源的情況下,對緩存資源池的并發請求還未達到新的 POOL CACHE MAX之前不會出現) } } }
[0041] notify //手動喚醒使用同一對象的其他排隊線程 } synchronized { //定時自動執行緩沖隊列中正在排隊的資源請求,被喚醒后排隊 執行step 1 to step 1 } synchronized { //定時自動執行:銷毀清理POOL和POOL_CACHE,并根據當前 緩存資源池有效資源數量,判定是否縮減緩存資源池邊界 clear POOL; clearPOOL CACHE; if( U N LOC K E D C AC Η H + LOCKb;L) CACHb; < POOL-CACHE_MAX * 縮減系數) { POOL CACHE MAX = POOL-CACHE-MAX * 縮減系數; } }
[0042] 為了進一步幫助了解上述資源管理器的資源調度方法,下面結合附圖對其進行詳 細介紹。
[0043] 如圖1所示,上述資源管理器的資源調度方法包括以下步驟:
[0044] 步驟100 :訪問資源池,請求獲取資源:如果資源池中未加鎖的資源集合中存在資 源,則直接獲取資源;否則,進入下一步驟。
[0045] 步驟200 :訪問緩存資源池,請求獲取資源:如果緩存資源池的未加鎖資源集合中 存在資源,則直接獲取資源;否則,進入下一步驟。
[0046] 在上述過程中,如果無法從資源池直接獲取資源時,首先考慮訪問諸如二級緩存 資源池這樣的緩存資源池,而不是選擇阻塞或加入排隊,由此可避免阻塞引起的系統無響 應問題。
[0047] 步驟300 :判斷資源池中的資源數量(資源池中未加鎖的資源集合與加鎖的資源 集合之和)是否小于資源池的設定容量:如果小于,則創建并獲取新資源;否則,將當前獲 取資源的請求加入請求緩沖隊列。
[0048] 步驟400 :判斷請求緩沖隊列是否達到最大容量;如果達到最大容量,則拒絕該請 求,即中斷本次資源獲取;否則,進入下一步驟。
[0049] 步驟500 :通過所述請求緩沖隊列訪問緩存資源池,請求獲取資源:如果緩存資源 池的未加鎖資源集合中存在資源,則直接獲取資源;否則,進入下一步驟。
[0050] 在上述過程中,請求緩沖隊列不與固定邊界的資源池進行任意直接交互,而僅與 邊界值可以動態調整的緩存資源池進行交互。這樣,不會像資源池那樣受固定邊界的限制 而需要經常移出閑置資源,而在請求緩沖隊列提出請求時經常重新創建資源,由此縮短了 資源獲取時間。
[0051] 步驟600 :判斷緩存資源池中的資源數量(未加鎖的資源集合與加鎖的資源集合 之和)是否小于緩存資源池的設定容量:如果小于,則創建新并獲取新資源;否則,根據當 前請求緩沖隊列的大小,對應增減緩存資源池的設定容量,然后返回上述步驟500。
[0052] 在本步驟中,一定臨界值內的當前請求緩沖隊列較大時,也就是說當前請求緩沖 隊列中的請求較多時,增加緩存資源池的設定容量,由此提高了設備利用效率,更好地發揮 了設備性能。
[0053] 在每次訪問請求緩沖隊列時,都要掃描請求緩沖隊列的容量大小,以根據請求緩 沖隊列的實時容量動態調整緩存資源池容量以及緩存資源池中資源(包括緩存資源池中 未加鎖資源集合及加鎖資源集合中的資源)存活時間最大值。也就是說,根據資源請求的 增減,相應地增/減緩存資源池容量或相應地減/增緩存資源池中資源存活時間最大值,以 進一步降低對設備資源的占用和消耗。
[0054] 步驟700 :回收使用過的資源。
[0055] 在本步驟中,對于使用過的資源,首先對其有效性進行驗證,接著回收依然有效的 資源(將其放回到資源池中,由此可盡量不建立新的資源,以進一步節省資源調度時間), 銷毀掉無效的資源。
[0056] 除此之外,在每次訪問資源池、緩存資源池時,都要掃描出空閑時間超過設定存活 時間最大值的資源,將這些資源移出資源池和緩存資源池并銷毀,以盡可能降低對設備資 源的占用和消耗。
[0057] 以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精 神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
【權利要求】
1. 一種資源管理器的資源調度方法,包括以下步驟: A、 訪問資源池,請求獲取資源:如果資源池中未加鎖的資源集合中存在資源,則直接獲 取資源;否則,進入下一步驟; B、 訪問緩存資源池,請求獲取資源:如果緩存資源池的未加鎖資源集合中存在資源,則 直接獲取資源;否則,進入下一步驟; C、 判斷資源池中的資源數量是否小于資源池的設定容量:如果小于,則創建并獲取新 資源;否則,將當前獲取資源的請求加入請求緩沖隊列; D、 判斷請求緩沖隊列是否達到最大容量;如果達到最大容量,則拒絕該請求,即中斷本 次資源獲取;否則,進入下一步驟; E、 通過所述請求緩沖隊列訪問緩存資源池,請求獲取資源:如果緩存資源池的未加鎖 資源集合中存在資源,則直接獲取資源;否則,進入下一步驟; F、 判斷緩存資源池中的資源數量是否小于緩存資源池的設定容量:如果小于,則創建 并獲取新資源;否則,根據所述請求緩沖隊列的大小,對應增減緩存資源池的設定容量,然 后返回上述步驟E。
2. 根據權利要求1所述的方法,其特征在于,步驟F后還包括以下步驟: G、 驗證使用過的資源的有效性,將有效的資源放回到所述資源池,銷毀掉無效的資源。
3. 根據權利要求1或2所述的方法,其特征在于, 訪問所述資源池、所述緩存資源池時,從中掃描出空閑時間超過設定存活時間最大值 的資源,將這些資源從所述資源池、所述緩存資源池中移出并銷毀。
【文檔編號】G06F9/50GK104063283SQ201410254167
【公開日】2014年9月24日 申請日期:2014年6月9日 優先權日:2014年6月9日
【發明者】管延軍, 蔣紅宇, 蔡龍 申請人:北京海泰方圓科技有限公司