專利名稱:負(fù)載平衡的制作方法
負(fù)載平衡 背景
托管執(zhí)行環(huán)境中的存儲器管理可以包括在清掃或掃描存儲器堆的期間 臨時掛起托管線程。然而,托管線程的延長掛起會使對應(yīng)的應(yīng)用程序的執(zhí) 行超時。
概述
對在托管執(zhí)行環(huán)境中的應(yīng)用程序、程序、方法、函數(shù)、或其它的代碼集合 體的部分的執(zhí)行至少受存儲器管理實(shí)現(xiàn)的潛在大小的影響。
附圖簡述
現(xiàn)根據(jù)以下的附圖描述托管執(zhí)行環(huán)境中的負(fù)載平衡。
圖l顯示通過網(wǎng)絡(luò)通信的設(shè)備,其中這些設(shè)備實(shí)現(xiàn)用于負(fù)載平衡的示例技術(shù)。
圖2顯示用于實(shí)現(xiàn)負(fù)載平衡的示例技術(shù)的執(zhí)行環(huán)境的示例。
圖3顯示根據(jù)負(fù)載平衡的示例實(shí)現(xiàn)的數(shù)據(jù)節(jié)點(diǎn)之間的示例數(shù)據(jù)流。
圖4顯示根據(jù)負(fù)載平衡的示例實(shí)現(xiàn)的示例處理流。
詳細(xì)描述
此處描述負(fù)載平衡。更具體而言,本描述涉及基于至少關(guān)于在相應(yīng)的執(zhí)行 環(huán)境中的存儲器管理實(shí)現(xiàn)的潛在大小的數(shù)據(jù)來控制應(yīng)用程序、程序、方法、函 數(shù)、或其它的代碼集合體(assemblage)中的至少數(shù)部分的某些行為。
在該詳細(xì)描述的上下文中,并根據(jù)面向?qū)ο蟮木幊?,方法可被視為對象?執(zhí)行的處理。因此,例如,當(dāng)消息被發(fā)送到對象時,該方法被實(shí)現(xiàn)。
此處描述的"進(jìn)程"可表示與應(yīng)用程序、程序、函數(shù)、或其它可編程或可 執(zhí)行代碼的集合體有關(guān)的模塊或代碼程序集的實(shí)際運(yùn)行。此處描述的"程序集"可表示代碼的部署單元,其可以或不能版本化。 此處描述的"資源"可包括與給定計(jì)算環(huán)境相關(guān)聯(lián)的物理資源和邏輯資源 兩者。作為非限制性示例,該資源的范圍可以從文件到端口到共享狀態(tài);艮P,
可被一個以上的可執(zhí)行實(shí)體共享的任何不可執(zhí)行的實(shí)體。
此處描述的"線程"可表示應(yīng)用程序、程序、函數(shù)、或其它可編程或可執(zhí) 行代碼的集合體內(nèi)的執(zhí)行路徑。線程使得可執(zhí)行指令的模塊的多條執(zhí)行路徑或 流在同一個應(yīng)用程序、程序、函數(shù)、或其它可編程和可執(zhí)行代碼的集合體內(nèi)并 發(fā)地出現(xiàn);這樣,在每個流內(nèi),可處理不同的事務(wù)或消息。其中可執(zhí)行多線程 進(jìn)程的多任務(wù)或多處理環(huán)境可在托管執(zhí)行環(huán)境中或非托管執(zhí)行環(huán)境中的任一 個中被發(fā)現(xiàn)。
此處描述的"隔離邊界(isolation boundary)"可表示可用作隔離單元的 邏輯或物理構(gòu)造。進(jìn)程是隔離邊界的一個示例。在托管執(zhí)行環(huán)境中,這樣的隔 離邊界可被稱作應(yīng)用程序域,該應(yīng)用程序域可包括多個執(zhí)行的線程。此術(shù)語僅 作為示例提供。即,此處描述的示例實(shí)現(xiàn)不限于上述的應(yīng)用程序域或甚至不限 于托管執(zhí)行環(huán)境,而是可以被應(yīng)用于其它執(zhí)行環(huán)境中的各種其它隔離邊界實(shí)現(xiàn) 中。更具體地,與此處描述的資源分配的范圍有關(guān)的隔離邊界還可涉及機(jī)器邊 界、進(jìn)程邊界、線程、以及類或程序集邊界。甚至更具體地,資源分配的范圍 可涉及公有/私有展示、程序集、或類。此外,資源分配可具有多個軸(axis) 或注解,包括,例如,資源的類型以及資源的可見性。
隔離邊界可以使要在那里執(zhí)行的代碼從指定源中加載;隔離邊界可以獨(dú)立 于其它這樣的隔離邊界而被中止;并且隔離邊界內(nèi)的處理可以被隔離以便在其 中發(fā)生的錯誤不影響進(jìn)程中的其它隔離邊界。更具體地,隔離邊界可隔離其中 資源的消耗,以致其它隔離邊界或者看不見資源的任何變化、或者只能以串行 的、原子的方式看見資源。
圖1示出具有處理結(jié)點(diǎn)的示例網(wǎng)絡(luò)環(huán)境100,這些處理結(jié)點(diǎn)可以按任何數(shù) 量及其組合互相通信來實(shí)現(xiàn)負(fù)載平衡的一個或多個示例。然而,負(fù)載平衡的實(shí) 現(xiàn)不限于網(wǎng)絡(luò)環(huán)境中的節(jié)點(diǎn)。此外,在圖1的示例網(wǎng)絡(luò)環(huán)境中,客戶機(jī)設(shè)備105、 服務(wù)器設(shè)備110A和110B以及"其它"設(shè)備115可以通過網(wǎng)絡(luò)125通信地互 相耦合;并且,此外,客戶機(jī)設(shè)備105、服務(wù)器設(shè)備110A和110B、和"其它"設(shè)備115中的至少一個能夠?qū)崿F(xiàn)此處所描述的負(fù)載平衡120。
客戶機(jī)設(shè)備105可以是包括臺式個人計(jì)算機(jī)(PC)、工作站、大型計(jì)算機(jī)、 因特網(wǎng)設(shè)備、以及機(jī)頂盒等各種常規(guī)計(jì)算機(jī)設(shè)備中的至少一個。此外,客戶機(jī) 設(shè)備105可以是能夠通過有線和/或無線鏈路與網(wǎng)絡(luò)125相關(guān)聯(lián)的任何設(shè)備中的 至少一個,這些設(shè)備包括個人數(shù)字助理(PDA)、膝上型計(jì)算機(jī)、蜂窩電話等 等。此外,客戶機(jī)設(shè)備105可以按各種數(shù)量和/或其組合來表示上述客戶機(jī)設(shè)備。 "其它"設(shè)備115還可以由客戶機(jī)設(shè)備105的上述任何一個示例來體現(xiàn)。
服務(wù)器設(shè)備110A和110B可根據(jù)負(fù)載平衡120的至少一個實(shí)現(xiàn)向客戶機(jī) 設(shè)備105或"其它"設(shè)備115提供各種數(shù)據(jù)和/或功能中的任何一種。數(shù)據(jù)可以 是公共可獲得的或者是受限制的,例如,僅限于某些用戶或只有付了適當(dāng)?shù)挠?閱費(fèi)或許可費(fèi)時才可用。服務(wù)器設(shè)備110A和110B的任何一個可以是各種數(shù) 量的網(wǎng)絡(luò)服務(wù)器、應(yīng)用程序服務(wù)器、或刀片服務(wù)器及其各種組合。通常,服務(wù) 器設(shè)備110A和110B用作內(nèi)容源,而客戶機(jī)設(shè)備105或者通過網(wǎng)絡(luò)125或者 以離線方式接收這樣的內(nèi)容。然而,根據(jù)此處描述的示例實(shí)現(xiàn),客戶機(jī)設(shè)備105 和服務(wù)器設(shè)備110A與110B可互換地成為網(wǎng)絡(luò)環(huán)境100中的發(fā)送節(jié)點(diǎn)或接收 節(jié)點(diǎn)。此外,根據(jù)負(fù)載平衡120的至少一個示例,服務(wù)器設(shè)備110A和110B 可被實(shí)現(xiàn)為網(wǎng)絡(luò)125上的眾多服務(wù)器設(shè)備中的一個。這樣的配置可以被非正式 地視為"服務(wù)器農(nóng)場(server farm)"。在這樣一個服務(wù)器農(nóng)場中,兩個或更 多聯(lián)網(wǎng)的服務(wù)器可在執(zhí)行同一個應(yīng)用程序、程序、功能、或其它可編程和可執(zhí) 行代碼的集合體中的至少數(shù)部分時共享。此外,"其它"設(shè)備115還可以由服 務(wù)器設(shè)備110A和110B的上述任何一個示例來體現(xiàn)。
"其它"設(shè)備115可以是根據(jù)此處描述的一個或多個示例的能夠?qū)崿F(xiàn)負(fù)載 平衡120的任何另外的設(shè)備。即,"其它"設(shè)備115可以是能夠?qū)崿F(xiàn)用于在至 少一個托管執(zhí)行環(huán)境中的應(yīng)用程序、程序、功能、或其它可編程和可執(zhí)行代碼 的集合體的至少一部分的負(fù)載平衡120的啟用軟件的計(jì)算或處理設(shè)備。更具體 地,"其它"設(shè)備115可用作負(fù)載平衡器。作為負(fù)載平衡器,"其它"設(shè)備115 可被實(shí)現(xiàn)為物理上與客戶機(jī)設(shè)備105或服務(wù)器設(shè)備110A和110B中的任一個 分開的硬件設(shè)備;或者,"其它"設(shè)備115可以被實(shí)現(xiàn)為在客戶機(jī)設(shè)備105或 服務(wù)器設(shè)備110A和110B中的至少一個上的固件或軟件。因此,"其它"設(shè)備115可以是其上實(shí)現(xiàn)了操作系統(tǒng)、解釋器、轉(zhuǎn)換器、編譯器、或運(yùn)行時執(zhí)行
環(huán)境中的任何一個的計(jì)算、處理、或服務(wù)器設(shè)備。這些示例并不意在以任何方 式為限制性的,并且因此,不應(yīng)該以那種方式來解釋。
網(wǎng)絡(luò)125可以表示包括有線和/或無線網(wǎng)絡(luò)等各種常規(guī)網(wǎng)絡(luò)拓?fù)浜皖愋椭?的任何一種。網(wǎng)絡(luò)125還可采用包括公共和/或?qū)S袇f(xié)議等各種常規(guī)網(wǎng)絡(luò)協(xié)議中 的任何一種。網(wǎng)絡(luò)125可包括(例如)因特網(wǎng)以及諸如802.11系統(tǒng)等一個或多 個局域網(wǎng)(也被個別地稱為LAN)中的至少數(shù)部分;諸如藍(lán)牙等個人局域網(wǎng) (即,PAN)。
設(shè)備105、 110A、 110B及115中的至少一個設(shè)備中的計(jì)算機(jī)體系結(jié)構(gòu)典 型地按照硬件與軟件來定義計(jì)算平臺。用于計(jì)算設(shè)備的軟件基于功能被歸類成 組,這些組包括硬件抽象層(或者稱為"HAL")、操作系統(tǒng)(或者稱為"OS") 以及應(yīng)用程序。
運(yùn)行時執(zhí)行環(huán)境可表示在OS和應(yīng)用程序之間的隔離空間,在該空間中, 應(yīng)用程序可在處理設(shè)備105、 一個或多個服務(wù)器設(shè)備110A和110B、或其它設(shè) 備115中的至少一個上執(zhí)行具體任務(wù)。更具體地,運(yùn)行時執(zhí)行環(huán)境意在通過向 在包括服務(wù)器、臺式計(jì)算機(jī)、膝上型計(jì)算機(jī)、移動處理設(shè)備、機(jī)頂盒以及游戲 控制臺等范圍不斷增加的處理設(shè)備上運(yùn)行的應(yīng)用程序提供抽象層和服務(wù)并進(jìn) 一步向該應(yīng)用程序提供包括存儲器管理及其配置的能力來提高在這些處理設(shè) 備上執(zhí)行應(yīng)用程序的可靠性。
運(yùn)行時執(zhí)行環(huán)境可用作應(yīng)用程序編程平臺以及應(yīng)用程序執(zhí)行平臺中的至
作為應(yīng)用程序編程平臺,運(yùn)行時執(zhí)行環(huán)境可將以多種計(jì)算語言中的一種編 寫的目標(biāo)應(yīng)用程序編譯為中間語言(下文稱"IL" ) 。 IL通常獨(dú)立于平臺并且 中央處理單元(下文稱"CPU")執(zhí)行IL。事實(shí)上,IL是比許多CPU機(jī)器語
言更高級的語言。
作為應(yīng)用程序執(zhí)行平臺,運(yùn)行時執(zhí)行環(huán)境可將己編譯的IL解釋成本機(jī)機(jī) 器指令。運(yùn)行時執(zhí)行環(huán)境可以或者采用解釋器或者采用"即時(just-in-time)" (下文稱JIT)編譯器來執(zhí)行這樣的指令?;蛘撸\(yùn)行時執(zhí)行環(huán)境可執(zhí)行、讀 取、解釋或以其它方式分析以IL格式而不是本機(jī)平臺執(zhí)行格式分配到運(yùn)行時執(zhí)行環(huán)境中的并已被編譯為程序集、方法或類型中的任何一種的中間語言代碼
(即,"IL")。此IL的源可被置于非托管執(zhí)行環(huán)境中或在設(shè)備105、 110和 115中的相同或單獨(dú)的一個設(shè)備上的運(yùn)行時執(zhí)行環(huán)境的單獨(dú)實(shí)現(xiàn)中。該源可在 或先于與該IL對應(yīng)的應(yīng)用程序、程序、方法、函數(shù)或其它可編程和可執(zhí)行代 碼的集合體的安裝時間部署IL。
不管怎樣,接著,本機(jī)機(jī)器指令可被CPU直接執(zhí)行。由于IL是獨(dú)立于 CPU的,因此只要在那個CPU平臺上運(yùn)行的OS主宿適當(dāng)?shù)倪\(yùn)行時執(zhí)行環(huán)境, IL即可在該CPU平臺上執(zhí)行。負(fù)載平衡120所涉及的運(yùn)行時環(huán)境的示例包括 Visual Basic運(yùn)行時環(huán)境;用于運(yùn)行例如^¥& 例程的Java 虛擬機(jī)運(yùn)行時環(huán)境; 或在執(zhí)行一調(diào)用例程之前將例如Microsoft .NetTM應(yīng)用程序編譯成機(jī)器語言的 公共語言運(yùn)行庫(CLR)環(huán)境。然而,這個列表只是提供示例而已。示例實(shí)現(xiàn) 不僅僅限于這些托管執(zhí)行環(huán)境。此外,由于可在測試環(huán)境和/或非托管執(zhí)行環(huán)境 內(nèi)實(shí)現(xiàn)一個或多個示例,因此示例實(shí)現(xiàn)不僅限于托管執(zhí)行環(huán)境。
被編譯為IL的應(yīng)用程序可被稱為"托管代碼",由此,運(yùn)行時執(zhí)行環(huán)境 也可被稱為"托管執(zhí)行環(huán)境"。托管代碼的各部分可被稱為"托管映像"。不 采用運(yùn)行時執(zhí)行環(huán)境來執(zhí)行的代碼可被稱為本機(jī)代碼應(yīng)用程序。
圖2顯示了其中可實(shí)現(xiàn)負(fù)載平衡120 (見圖1)的示例的運(yùn)行時執(zhí)行環(huán)境 200的示例。
根據(jù)至少一個示例實(shí)現(xiàn),運(yùn)行時執(zhí)行環(huán)境200可幫助用于計(jì)算機(jī)設(shè)備平臺 的托管代碼的執(zhí)行。托管代碼可被認(rèn)為是一組核心應(yīng)用程序開發(fā)技術(shù)的一部 分,并且還可被視為為在運(yùn)行時執(zhí)行環(huán)境200上執(zhí)行而被編譯以便向計(jì)算設(shè)備 平臺提供對應(yīng)的服務(wù)的代碼。另外,運(yùn)行時執(zhí)行環(huán)境200可將解釋級的托管代 碼翻譯成可被代理并隨后由處理器執(zhí)行的指令。用于運(yùn)行時執(zhí)行環(huán)將200的框 架還可提供被視為用于托管應(yīng)用程序的軟件構(gòu)件塊(software building block) 的類庫。
根據(jù)進(jìn)一步的示例實(shí)現(xiàn),運(yùn)行時執(zhí)行環(huán)境200可提供原本期望從內(nèi)核獲得 的至少部分功能,取決于設(shè)備105、 110A、 IIOB和115中的任何一個特定設(shè) 備的資源限制,計(jì)算設(shè)備可能有或沒有該至少部分功能。因此,運(yùn)行時執(zhí)行環(huán) 境200的至少一個示例可實(shí)現(xiàn)以下輸入/輸出(下文稱"I/O")例程管、存儲器管理、主管(administration)、以及服務(wù)例程管理。因此,運(yùn)行時執(zhí)行環(huán) 境200可包括I/O組件205、至少一個存儲器管理器210、主管器215 (administrator)、以及執(zhí)行組件220。這些組件僅作為示例提供,并且將在下 面進(jìn)一步詳細(xì)描述;S卩,并不意在將這些示例限于任何特定實(shí)現(xiàn),并且不應(yīng)該 作這樣的推斷。此外,可以在運(yùn)行時執(zhí)行環(huán)境200的示例的各種組合及其配置
中實(shí)現(xiàn)該組件。
運(yùn)行時執(zhí)行環(huán)境200的I/O組件205可提供對與計(jì)算設(shè)備平臺相關(guān)聯(lián)的數(shù) 據(jù)源(即,處理器和外圍設(shè)備)的異步訪問。這樣的數(shù)據(jù)源的示例可以是如前 面圖1所述的設(shè)備105、 IIOA、 110B以及115中的一個或多個。更具體地,I/O 組件205可以為運(yùn)行時執(zhí)行環(huán)境200提供穩(wěn)健的系統(tǒng)吞吐量并且進(jìn)一步使得對 I/O請求從其中生成的代碼的執(zhí)行流線化。
存儲器管理器210可表示在運(yùn)行時執(zhí)行環(huán)境200內(nèi)或與運(yùn)行時執(zhí)行環(huán)境 200相關(guān)聯(lián)的被稱為"無用信息收集器"的模塊。無用信息收集(或者下文稱 為"GC")可被視為托管代碼執(zhí)行環(huán)境的一個穩(wěn)健特征,通過無用信息收集, 如果經(jīng)對存儲器堆的清掃或掃描發(fā)現(xiàn)一個對象不再被任何應(yīng)用程序使用,則該 對象被釋放(即解除分配)。在存儲器管理器210的至少一個示例中,空閑存 儲器堆的清掃可被實(shí)現(xiàn)為一線性搜索。這一實(shí)現(xiàn)會非常適用于其存儲器大小受 到約束并且相應(yīng)設(shè)備的用戶可察覺到清掃完成的延遲的計(jì)算設(shè)備平臺的一個 示例。
存儲器管理器210的一個示例可實(shí)現(xiàn)"并發(fā)GC"功能以便允許托管線程 在存儲器堆的清掃或掃描期間繼續(xù)運(yùn)行。即,在解除分配期間,并發(fā)GC可允 許并行地繼續(xù)分配。并發(fā)GC功能(或者此處稱為"并發(fā)GC")適用于基于 互動或GUI (圖形用戶界面)的應(yīng)用程序。
然而,盡管負(fù)載平衡120可能與并發(fā)GC功能有關(guān),但本負(fù)載平衡120的 示例實(shí)現(xiàn)在非并發(fā)GC功能的上下文中描述,通過非并發(fā)GC功能, 一個或多 個托管線程會在存儲器堆的清掃或掃描期間內(nèi)被掛起。
由存儲器管理器210實(shí)現(xiàn)的進(jìn)一步功能可包括在計(jì)算設(shè)備平臺上運(yùn)行的 各任務(wù)中,管理有限易失性RAM (即,存儲器堆)存儲的一個或多個鄰接塊 或存儲器的一組鄰接塊;向在該計(jì)算設(shè)備平臺上運(yùn)行的至少一個應(yīng)用程序分配存儲器;根據(jù)應(yīng)用程序中的至少一個的請求釋放存儲器的至少數(shù)部分;以及防
止任何應(yīng)用程序入侵性地訪問已經(jīng)被分配給任何其它應(yīng)用程序的存儲器空間。
主管器215可表示運(yùn)行時執(zhí)行環(huán)境,20|內(nèi)或與該運(yùn)行時執(zhí)行環(huán)境相關(guān)聯(lián)的 用來接收應(yīng)用程序、程序、方法、函數(shù)、或其它可編程和可執(zhí)行代碼的集合體 中的至少一部分以便在運(yùn)行時執(zhí)行環(huán)境200中執(zhí)行的模塊。此外,根據(jù)負(fù)載平 衡120的至少一個示例實(shí)現(xiàn),主管器215可與存儲器管理器210相協(xié)調(diào)以便在 應(yīng)用程序執(zhí)行期間在編譯時、初始運(yùn)行時、或在其之后的任何時刻控制運(yùn)行時 執(zhí)行環(huán)境一ol內(nèi)的應(yīng)用程序、程序、方法、函數(shù)、或其它可編程和可執(zhí)行代碼 的集合體的行為。
執(zhí)行組件220可表示運(yùn)行時執(zhí)行環(huán)境200內(nèi)或與運(yùn)行時執(zhí)行環(huán)境相關(guān)聯(lián)的 用來使托管代碼能在計(jì)算設(shè)備平臺上執(zhí)行的模塊。執(zhí)行組件220可被視為在其 中實(shí)現(xiàn)應(yīng)用程序代碼的執(zhí)行以及提供運(yùn)行時服務(wù)(例如,設(shè)備訪問和存儲器管 理)的環(huán)境。
圖3示出根據(jù)負(fù)載平衡120 (見圖1)的示例實(shí)現(xiàn)的示例數(shù)據(jù)流300?,F(xiàn)參 照圖1至圖2的特征來描述示例數(shù)據(jù)流300,然而這樣的實(shí)現(xiàn)僅作為示例被提 供并且并不意在以任何限制的方式來解釋。
至少根據(jù)上面提供的"隔離邊界"的描述,進(jìn)程305A、 305B和305C可 被視為邏輯或物理構(gòu)造。因此,根據(jù)負(fù)載平衡120的各種實(shí)現(xiàn),進(jìn)程305A、 305B和305C可涉及機(jī)器邊界、進(jìn)程邊界、線程、應(yīng)用程序域、以及類或程序 集邊界。此外,負(fù)載平衡120的實(shí)現(xiàn)絕不限于僅用于描述目的而在此處示出和 描述的這三種構(gòu)造(即,305A、 305B和305C)。
作為示例,進(jìn)程305A、 305B和305C可涉及多個服務(wù)器(S卩,機(jī)器邊界)。 作為硬件來實(shí)現(xiàn),服務(wù)器305A、 305B和305C可以是至少一個運(yùn)行時執(zhí)行環(huán) 境200在其上作為應(yīng)用程序執(zhí)行平臺而運(yùn)行的獨(dú)立的硬件設(shè)備。作為軟件服務(wù) 器來實(shí)現(xiàn),進(jìn)程305A、 305B和305C可以是正被運(yùn)行時執(zhí)行環(huán)境200的一個 實(shí)現(xiàn)執(zhí)行的公共應(yīng)用程序、程序、方法、函數(shù)、或其它可編程和可執(zhí)行代碼的 集合體的模塊化組件。
源自進(jìn)程305A、 305B和305C中的任何一個的存儲器管理數(shù)據(jù)310可包 括表示即將到來的存儲器堆的清掃或掃描(即,GC)的數(shù)據(jù),以便解除分配(即,釋放)不再被正被運(yùn)行時執(zhí)行環(huán)境200的一個實(shí)現(xiàn)執(zhí)行的應(yīng)用程序、程 序、方法、函數(shù)、或其它代碼集合體使用的一個或多個對象。
在進(jìn)程305A、 305B和305C被實(shí)現(xiàn)為獨(dú)立的硬件設(shè)備的示例中,存儲器 管理數(shù)據(jù)310可源自在一個或多個這樣的設(shè)備上運(yùn)行的運(yùn)行時執(zhí)行環(huán)境200的 一個實(shí)現(xiàn)。在進(jìn)程305A、 305B和305C被實(shí)現(xiàn)為公共應(yīng)用程序、程序、方法、 函數(shù)、或其它可編程和可執(zhí)行代碼的集合體的模塊化組件的示例中,存儲器管 理數(shù)據(jù)310可以源自模塊化組件在其上正被執(zhí)行的運(yùn)行時執(zhí)行環(huán)境200的一個 實(shí)現(xiàn)。更具體地,在上述示例中,存儲器管理數(shù)據(jù)310可單個地或經(jīng)組合地源 自存儲器管理器210或主管器模塊215。
存儲器管理數(shù)據(jù)310可通過采用與各種系統(tǒng)體系結(jié)構(gòu)的應(yīng)用程序接口 (API)兼容的一個或多個API來實(shí)現(xiàn)事務(wù)處理。更具體地,根據(jù)負(fù)載平衡120 的各種實(shí)現(xiàn),對應(yīng)于存儲器管理數(shù)據(jù)310的API可以能夠啟動進(jìn)程305A、305B 和305C之間的負(fù)載平衡(即,跨機(jī)器邊界、進(jìn)程邊界、線程、應(yīng)用程序域、 以及類或程序集邊界)。如此處所描述的,API可被視為被應(yīng)用程序、程序、 方法、函數(shù)、或其它可編程和可執(zhí)行代碼的集合體使用來指引運(yùn)行時執(zhí)行環(huán)境 200或甚至是操作系統(tǒng)的過程執(zhí)行的一個或多個例程。
存儲器管理數(shù)據(jù)310可包括由存儲器管理器210或主管器模塊215單個地 或組合地實(shí)現(xiàn)的一個或多個API。以下所列和所描述的這種API的命名僅出于 描述的目的而被提供,并且作為非限制性的示例來提供。
MaxGenerationNotifier (最大生成通知器)可表示其例示意在提示負(fù)載平 衡器315對正被運(yùn)行時執(zhí)行環(huán)境200的特定實(shí)現(xiàn)執(zhí)行的同一個或另一個應(yīng)用程 序、程序、方法、函數(shù)、或其它代碼集合體中的至少一部分進(jìn)行重新分配的類。 更具體地,當(dāng)存儲器管理器210或主管器215單個地或組合地檢測到運(yùn)行時執(zhí) 行環(huán)境200上的即將到來的GC會一直運(yùn)行以至引起執(zhí)行運(yùn)行時執(zhí)行環(huán)境200 上的同一個或另一個應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體時的超 時的時候,MaxGenerationNotifier被例示。這樣的檢測可基于在應(yīng)用程序、程 序、方法、函數(shù)、或其它代碼集合體的當(dāng)前執(zhí)行期間對閾值量存儲器堆的分配。 然后,有效地,MaxGenerationNotifier的例示可向負(fù)載平衡器提供運(yùn)行時執(zhí)行 環(huán)境200的狀態(tài)的主動通知。更具體地,當(dāng)存儲器管理器210或主管器215或單個地或組合地檢測到即 將到來的GC有可能會超過閾值邏輯或物理大小時,MaxGenerationNotifier被 例示。例如,當(dāng)存儲器管理器210或主管器215或者單個地或者組合地檢測到 即將到來的GC是一個晚生成(late generation) GC的實(shí)例并因此可能清掃或 掃描當(dāng)前可獲得的處理能力所允許的最大量的堆(例如,2GB)時,可例示 MaxGnerationNotifier。結(jié)果,由于托管線程在存儲器堆的清掃或掃描期間會被 掛起,因此對應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的執(zhí)行會在晚 生成GC完成之前超時。因此,在這一大小的GC開始之前, MaxGenerationNotifier會被例示來通知負(fù)載平衡器315至少需要對應(yīng)用程序、 程序、方法、函數(shù)、或其它代碼集合體中的至少一部分執(zhí)行進(jìn)行重新分配。
當(dāng)然,2GB堆僅作為晚生成GC的一個示例來描述。可擔(dān)當(dāng)用于例示 MaxGenerationNotifier的催化劑的即將到來的GC的大小可基于眾多因素而改 變,并且會隨處理能力的演變而增大。該因素可與處理器設(shè)備的處理能力以及 完成GC的預(yù)期時間有關(guān)。此外,當(dāng)編寫了該正執(zhí)行的應(yīng)用程序、程序、方法、 函數(shù)、或其它代碼集合體的程序員出于效率和安全考慮中的至少一個目的時, 該程序員的偏好(如向主管器215所指示的)也可啟動對MaxGenerationNotifier 的例示。
此外,MaxGenerationNotifier的至少一個替換實(shí)現(xiàn)可包括用于重定向正被 運(yùn)行時執(zhí)行環(huán)境200執(zhí)行的對應(yīng)的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼 集合體中的至少一部分的執(zhí)行的一個或多個特定指令。
MaxGenerationCompleteNotifier (最大生成完成通知器)可表示其例示意 在通知負(fù)載平衡器315被MaxGenerationNotifier例示的GC已經(jīng)完成的類。因 此,MaxGenerationCompleteNotifier的例示可用來通知負(fù)載平衡器315對正執(zhí) 行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體中的一個或多個部分的 重新分配在不會不利地影響運(yùn)行時執(zhí)行環(huán)境200的執(zhí)行的情況下可停止。更具 體地,當(dāng)存儲器管理器210或主管器215或者單個地或組合地檢測到以下的至 少 一 個情況時MaxGenerationNotifier可被例示,這些情況有用作 MaxGenerationNotifier的最新近例示的催化劑的GC完成;自 MaxGeneratationMotifier的例示開始過了一個預(yù)定的時間閾值;或者為當(dāng)前正執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體執(zhí)行了另一編程模塊 代碼。
負(fù)載平衡器315可表示物理上與客戶機(jī)設(shè)備105分開的硬件設(shè)備,或作為 客戶機(jī)105或服務(wù)器設(shè)備IIOA和110B中的至少一個上的固件或軟件組件。
當(dāng)例示MaxGenerationNotifier時,負(fù)載平衡器315可以重新分配對當(dāng)前正 執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體中的至少數(shù)部分的處 理以便避免在GC期間的超時。例如,當(dāng)接收包括表示進(jìn)程305A上的即將到 來的GC的MaxGenerationNotifier的例示的存儲器管理數(shù)據(jù)310時,負(fù)載平衡 器315可以接收執(zhí)行同一個或另一個當(dāng)前正執(zhí)行的應(yīng)用程序、程序、方法、函 數(shù)、或其它代碼集合體中的數(shù)部分的一個或多個請求,并將該執(zhí)行重定向至進(jìn) 程305B和進(jìn)程305C中的至少一個。
當(dāng)例示MaxGenerationCompleteNotifier時,負(fù)載平衡器315可停止將當(dāng)前 正執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的處理重新分配給 進(jìn)程305B和305C。因此,負(fù)載平衡器315可擁有在進(jìn)程305A上執(zhí)行當(dāng)前正 執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的選項(xiàng)。
數(shù)據(jù)流300的至少一個替換實(shí)現(xiàn)不包括負(fù)載平衡器315。 B卩,這個替換實(shí) 現(xiàn)通過擁有進(jìn)程305A、 305B和305C來實(shí)現(xiàn)負(fù)載平衡。
圖4顯示對應(yīng)于負(fù)載平衡120 (見圖1)的至少一個示例實(shí)現(xiàn)的示例處理 流400。示例處理流400參考圖1-3的特征在下文中描述,然而此實(shí)現(xiàn)僅作為 示例而提供并且并不意在以任何限制方式來解釋。
框405可表示單個地或以各種組合共同地被實(shí)現(xiàn)為進(jìn)程305A、過程305B、 或過程305C的一部分的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體中 的至少一部分的執(zhí)行。盡管負(fù)載平衡120并不如此受限制,但框405可表示在 托管執(zhí)行環(huán)境(即,運(yùn)行時執(zhí)行環(huán)境200)中的執(zhí)行。
框410可表示存儲器管理器210或主管器215或者單個地或者組合地確定 在當(dāng)前正執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的執(zhí)行期間 已經(jīng)分配了閾值量的堆,并且由此GC即將到來?;蛘?,框410可表示存儲器 管理器210或主管器215或者單個地或者組合地檢査編程代碼的至少一部分來 確定對運(yùn)行時執(zhí)行環(huán)境200在其上運(yùn)行的處理設(shè)備的存儲器堆的清掃或掃描即將到來。
判決框415可表示存儲器管理器210或主管器215或者單個地或者組合地 相對于預(yù)定閾值評估預(yù)期GC實(shí)現(xiàn)的大小。該評估被用來確定存儲器堆的物理 大小是否超出預(yù)定閾值(例如,2GB或更多)以至于將可能使當(dāng)前正執(zhí)行的應(yīng) 用程序、程序、方法、函數(shù)、或其它代碼集合體的執(zhí)行超時。根據(jù)一個替換例, 可對照避免超時的預(yù)定時間閾值來對將預(yù)期GC完成的時間做出該評估。根據(jù) 另一個示例,該評估甚至可包括檢查編程代碼的至少一部分來確定即將到來的 GC是否有意作為要重新分配的正執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其 它代碼集合體中的至少數(shù)部分的催化劑。
接著否定判決框415,框420A可表示存儲器管理器210實(shí)現(xiàn)用于進(jìn)程 305A、 305B、或305C中的一個宿主進(jìn)程上的正執(zhí)行的應(yīng)用程序、程序、方法、 函數(shù)、或其它代碼集合體的GC。然后,處理流程可返回到框405以繼續(xù)執(zhí)行 當(dāng)前執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體。
接著肯定判決框415,框425可表示存儲器管理器210或主管器215單個 地或組合地通知負(fù)載平衡器315該預(yù)期GC達(dá)到或超過預(yù)定閾值。g卩,當(dāng)確定 預(yù)期的GC的邏輯或物理參數(shù)將會超過閾值時,管理模塊210或主管器215可 單個地或者組合地通知負(fù)載平衡器該即將到來的GC有可能會引起當(dāng)前被執(zhí)行 的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的超時。甚至更具體地, 管理模塊210或主管器215可單個地或組合地例示提供對預(yù)期狀態(tài)的通知的 API (例如,MaxGenerationNotifier)。
在框425的至少一個替換實(shí)現(xiàn)中,存儲器管理器210或主管器215可單個 地或者組合地提供其它形式的通知。例如,該通知可以是包括調(diào)用作為先前向 存儲器管理器210或主管器215注冊過的進(jìn)程305A、進(jìn)程305B、或進(jìn)程305C 的一部分被執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的事件。
該通知事件的一個示例可包括圖3中的進(jìn)程305A、 305B、和305C中的 每一個通過單個或組合的存儲器管理器210或主管器215訂閱一個或多個存儲 器管理事件(例如,MaxGenerationNotifier)。例如,進(jìn)程305A可實(shí)現(xiàn)可在存 儲器管理器210或主管器215單個地或組合地發(fā)布MaxGenNotifier時被調(diào)用的 兩個函數(shù)。這樣的調(diào)用的非限制性示例如下(1) GC.MaxGenerationNotifier+=new MaxGenerationNotificationHandler(On—MaxGeneration—Notify 1); P)GC .MaxGenerationNotifier+=new
MaxGenerationNotificationHandler(On—MaxGeneration—Notify2);
其中MaxGeneration—Notify 1和MaxGeneration_Notify2是上述的函數(shù)。此外,
函數(shù)MaxGeneration—Notify 1和MaxGeneration—Notify2可通知負(fù)載平衡器310
訂閱的事件。因此,當(dāng)訂閱的事件發(fā)生時,負(fù)載平衡器315可采取所請求的負(fù)
載平衡動作。
框430可表示負(fù)載平衡器315在進(jìn)程305A、 305B、和305C中重新分配 當(dāng)前被執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體中的至少數(shù)部 分。因此,例如,如果在預(yù)期依據(jù)宿主進(jìn)程305A的GC實(shí)現(xiàn)時接收到框425 處的通知,框430可表示負(fù)載平衡器315接收執(zhí)行同一個或另一個當(dāng)前被執(zhí)行 的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體的至少一部分的請求,并 將所請求的執(zhí)行重定向至進(jìn)程305B和305C中的至少一個。即,框430可表 示負(fù)載平衡器315將當(dāng)前運(yùn)行的進(jìn)程305A中的當(dāng)前被執(zhí)行的應(yīng)用程序、程序、 方法、函數(shù)、或其它代碼集合體中的至少數(shù)部分重新分配至并發(fā)運(yùn)行的進(jìn)程 305B和305C中的一個。
框420B可表示存儲器管理器210實(shí)現(xiàn)用于在進(jìn)程305A、 305B、或305C 中的一個宿主進(jìn)程上正執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合 體的GC,而相應(yīng)的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼集合體中的至 少數(shù)部分正在其它并發(fā)運(yùn)行的進(jìn)程305A、 305B、和305C上執(zhí)行。因此,例 如,如果在預(yù)期依據(jù)宿主進(jìn)程305A的GC實(shí)現(xiàn)時接收到框425處的通知,框 430可表示負(fù)載平衡器315將當(dāng)前被執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或 其它代碼集合體中的至少數(shù)部分重新分配給進(jìn)程305B和305C中的至少一個, 并且框420A可表示存儲器管理器210在宿主進(jìn)程305A上實(shí)現(xiàn)GC。
框435可表示存儲器管理器210或主管器215單個地或者組合地通知負(fù)載 平衡器GC已經(jīng)完成。該通知可包括或不包括用來停止當(dāng)前負(fù)載平衡實(shí)現(xiàn)的指 令。甚至更具體地,管理模塊219或主管器215可單個地或者組合地例示提供 當(dāng)前狀態(tài)的通知的API (例如,MaxGenerationNotifier)。然后,處理流返回到框405以繼續(xù)執(zhí)行當(dāng)前被執(zhí)行的應(yīng)用程序、程序、方法、函數(shù)、或其它代碼 集合體。
類似于框425處的處理,通知事件可包括圖3中的迸程305A、 305B、和 305C中的每一個通過單個或組合的存儲器管理器210或主管器215訂閱一個 或多個存儲器管理事件(例如,MaxGenerationCompleteNotifier)。因此,例 如,進(jìn)程305A可實(shí)現(xiàn)可在存儲器管理器210或主管器215單個地或組合地發(fā) 布MaxGenCompleteNotifier時被調(diào)用的兩個函數(shù)。這樣的調(diào)用的非限制性示例
如下
(2 ) GC .1^乂061^&廿011(1;011^1616"01^61+=116\^
MaxGenerationCompleteNotificationHandler(On—MaxGenerationComplete一Notify
1) ;
(2)GC.MaxGenerationCompleteNotifier+=new
MaxGenerationCompleteNotificationHandler(On一MaxGenerationComplete一Notify
2) ;
其中MaxGenerationComplete—Notifyl禾卩MaxGenerationComplete一Notify2 是上述的函數(shù)。此夕卜,函數(shù) MaxGenerationComplete—Notify 1 和 MaxGenerationComplete—Notify2可通知負(fù)載平衡器315訂閱的事件。因此,當(dāng)
訂閱的事件發(fā)生時,負(fù)載平衡器315可根據(jù)請求至少暫時停止負(fù)載平衡。
關(guān)于圖1-4的上述描述,對于在運(yùn)行時執(zhí)行環(huán)境上執(zhí)行的一個或多個應(yīng)用 程序的負(fù)載平衡可根據(jù)與存儲器管理數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)來實(shí)現(xiàn)。然而,此處描 述的示例限制并不局限于僅基于存儲器管理數(shù)據(jù)的負(fù)載平衡。相反,通知(即, 通知)可被例示來實(shí)現(xiàn)基于眾多邏輯和物理準(zhǔn)則的負(fù)載平衡。
用于上述的示例和實(shí)現(xiàn)中的任何一個的計(jì)算機(jī)環(huán)境可包括具有例如一個 或多個處理器或處理單元、系統(tǒng)存儲器、耦合各種系統(tǒng)組件的系統(tǒng)總線等計(jì)算 設(shè)備。
計(jì)算設(shè)備可包括各種計(jì)算機(jī)可讀介質(zhì),包括易失性和非易失性介質(zhì)、可移 動和不可移動介質(zhì)兩者。系統(tǒng)存儲器可包括采用諸如隨機(jī)存取存儲器(RAM) 等易失性存儲器和/或諸如只讀存儲器(ROM)或閃存RAM等非易失性存儲 器形式的計(jì)算機(jī)可讀介質(zhì)。可以意識到,能存儲可被計(jì)算機(jī)訪問的數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì),諸如磁帶盒或其它磁存儲設(shè)備、閃存卡、CD-ROM、 數(shù)字多功能盤(DVD)或其它光學(xué)存儲、隨機(jī)存取存儲器(RAM)、只讀存 儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)等,也可被用來實(shí) 現(xiàn)示例計(jì)算系統(tǒng)和環(huán)境。
整篇說明書對"示例"、"替換示例"、"至少一個示例"、"實(shí)現(xiàn)"或 "示例實(shí)現(xiàn)"的表述表示一個具體描述的特征、結(jié)構(gòu)或特點(diǎn)被包括在本發(fā)明的 至少一個實(shí)現(xiàn)中。因此,該詞語的使用可表示比一個實(shí)現(xiàn)多的更多實(shí)現(xiàn)。此外, 所描述的特征、結(jié)構(gòu)、或特點(diǎn)可以用任何合適的方式在一個或多個實(shí)現(xiàn)中組合。
然而,相關(guān)領(lǐng)域的技術(shù)人員可認(rèn)識到,可以不采用一個或多個具體細(xì)節(jié)或 者采用其它方法、資源、材料等來實(shí)踐本發(fā)明。在另一個示例中,公知的結(jié)構(gòu)、 資源、或操作沒有被顯示或詳細(xì)描述僅僅是為了避免混淆本發(fā)明的各方面。
盡管示出和描述了本發(fā)明的各示例實(shí)現(xiàn)和應(yīng)用,但將理解,本發(fā)明并不局 限于上述的精確配置和資源。本領(lǐng)域的技術(shù)人員可根據(jù)本發(fā)明此處所公開的各 個方法和系統(tǒng)的安排、操作以及細(xì)節(jié)作出各種修改、變化、以及變型,而不背 離如上述以及下面所請求保護(hù)的本發(fā)明的范圍。
權(quán)利要求
1.一種方法,包括接收(415)在執(zhí)行(405)托管執(zhí)行環(huán)境(200)中的應(yīng)用程序期間存儲器分配超過閾值的指示;以及重新分配(430)所述應(yīng)用程序的至少一部分在隔離邊界的執(zhí)行。
2. 如權(quán)利要求1所述的方法,其特征在于,所述方法是根據(jù)負(fù)載平衡器來 執(zhí)行的。
3. 如權(quán)利要求1所述的方法,其特征在于,所接收到的指示包括為預(yù)期的 執(zhí)行超時做準(zhǔn)備的通知。
4. 如權(quán)利要求l所述的方法,其特征在于,所接收到的指示包括即將到來 的存儲器堆的清掃預(yù)期會引起執(zhí)行超時的通知。
5. 如權(quán)利要求1所述的方法,其特征在于,所接收到的指示包括對關(guān)于所 述應(yīng)用程序的執(zhí)行的狀態(tài)的預(yù)覽。
6. 如權(quán)利要求l所述的方法,其特征在于,所述接收還包括接收來自與所 述托管執(zhí)行環(huán)境相關(guān)聯(lián)的存儲器管理組件中的應(yīng)用程序編程接口 (API)的例 示。
7. 如權(quán)利要求1所述的方法,其特征在于,所述隔離邊界可以是機(jī)器邊界、 進(jìn)程邊界、線程邊界、類邊界、或程序集邊界中的任何一種。
8. 如權(quán)利要求1所述的方法,其特征在于,所述重新分配包括重新分配所 述應(yīng)用程序的至少一部分的執(zhí)行。
9. 如權(quán)利要求1所述的方法,其特征在于,所述重新分配包括重定向在所 述隔離邊界執(zhí)行所述應(yīng)用程序的至少數(shù)部分的請求。
10. 如權(quán)利要求1所述的方法,其特征在于,所述重新分配包括將執(zhí)行所述應(yīng)用程序的一部分的請求重定向至另一服務(wù)器。
11. 至少一種具有當(dāng)被讀取后使得一個或多個處理器執(zhí)行以下步驟的一個或多個可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述步驟包括監(jiān)視(410)執(zhí)行(405)托管代碼期間內(nèi)的存儲器分配; 確定(415)所述存儲器分配何時超過閾值;以及 發(fā)送(425)所述存儲器分配已超過所述閾值的通知。
12. 如權(quán)利要求ll所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述一 個或多個可執(zhí)行指令的發(fā)送使得所述一個或多個處理器將所述通知發(fā)送至一 負(fù)載平衡器。
13. 如權(quán)利要求11所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述一 個或多個可執(zhí)行指令的發(fā)送使得所述一個或多個處理器例示一 API類。
14. 如權(quán)利要求11所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述通 知包括即將到來的對象解除分配的實(shí)現(xiàn)可引起托管代碼的執(zhí)行超時的指示。
15. 如權(quán)利要求11所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述通 知包括重定向在隔離邊界執(zhí)行所述托管代碼的一部分的請求的指令。
16. 如權(quán)利要求ll所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述通 知包括重定向在機(jī)器邊界、進(jìn)程邊界、線程邊界、類邊界、或程序集邊界中的 任一種執(zhí)行所述托管代碼的一部分的請求的指令。
17. 如權(quán)利要求11所述的至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,所述通 知包括將執(zhí)行所述托管代碼的一部分的請求重定向至另一服務(wù)器的指令。
18. —種系統(tǒng),包括監(jiān)視(410)執(zhí)行(405)托管代碼期間的存儲器分配的管理器(210); 當(dāng)所監(jiān)視的分配超過閾值時發(fā)送(425)通知的主管器(215);以及 被所述通知提示的、分配(430)所述托管代碼的部分以便在隔離邊界執(zhí) 行的組件(315).
19. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述通知指示即將到來的所 述存儲器的掃描將使托管代碼的執(zhí)行超時。
20. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述隔離邊界是機(jī)器邊界、 進(jìn)程邊界、線程邊界、類邊界、或程序集邊界中的種。
全文摘要
避免在執(zhí)行托管執(zhí)行環(huán)境中的應(yīng)用程序期間超時的工作通過監(jiān)視存儲器分配來實(shí)現(xiàn)。
文檔編號G06F17/00GK101292234SQ200680039145
公開日2008年10月22日 申請日期2006年9月28日 優(yōu)先權(quán)日2005年10月20日
發(fā)明者M·Z·史蒂芬斯, P·H·杜斯德 申請人:微軟公司