用于存儲器管理的系統(tǒng)和方法
【專利摘要】用于在web應(yīng)用的并行處理期間共享存儲器的自動存儲器管理的系統(tǒng)和方法。該系統(tǒng)包括計算系統(tǒng),該計算系統(tǒng)被配置成允許在網(wǎng)頁瀏覽器內(nèi)執(zhí)行的web應(yīng)用的并行計算。該計算系統(tǒng)包括共享存儲器,其具有被分發(fā)給web應(yīng)用的處理功能的至少第一線程和至少一個衍生線程的塊集合。存儲器被劃分為幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫,其中第一線程可訪問幼稚堆和成熟堆,并且至少一個衍生線程可訪問多個私用幼稚區(qū)中關(guān)聯(lián)的一個。在web應(yīng)用的并行計算期間,共享存儲器的管理包括多個私用幼稚區(qū)中的至少每一個的廢物收集。
【專利說明】用于存儲器管理的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001] 本公開涉及存儲器管理,并且,更具體地,涉及用于在瀏覽器內(nèi)web應(yīng)用的并行處 理期間共享存儲器的自動存儲器管理的系統(tǒng)和方法。
【背景技術(shù)】
[0002] 并行處理(本文也稱為"并行計算")是一種計算形式,其中,多個計算同時執(zhí)行, 基于大問題常常能夠被分為隨后同時("并行")解決的更小問題這一原理進(jìn)行操作。隨著 計算機(jī)的功率消耗(和因此,熱量生成)已經(jīng)成為近年來的關(guān)注,并行計算已經(jīng)成為計算機(jī) 架構(gòu)中的主導(dǎo)范式,主要以現(xiàn)代處理器的形式,譬如多核處理器。如一般所理解的那樣,多 核處理器是具有讀取和執(zhí)行程序指令的兩個或更多獨立中央處理單元(CPU)核的單個計 算部件。多個核可以每周期從多個指令流發(fā)出多個指令,提高了用于服從并行計算的程序 的總體速度。據(jù)此,多核處理器上的并行處理一般可以包括同時使用多于一個核來執(zhí)行程 序和/或多個計算線程。
[0003] 并行處理一般已經(jīng)被應(yīng)用于原生應(yīng)用(例如,本地安裝的應(yīng)用,其被設(shè)計成在其 正在被運行于其中的計算機(jī)環(huán)境(機(jī)器語言和0S)中運行)。對用戶來說在網(wǎng)頁瀏覽器內(nèi) 訪問web應(yīng)用和與web應(yīng)用一起工作已經(jīng)變得越來越普遍。web應(yīng)用一般必須發(fā)揮所有可 用的計算資源的優(yōu)勢,以提供可能達(dá)到的最佳用戶體驗。然而,由于缺乏合適的編程模型, web應(yīng)用未必充分利用并行客戶端硬件。ECMAScript,由Ecma International標(biāo)準(zhǔn)化的腳本 語言,是以若干種眾所周知的語言的形式廣泛用于web上客戶端側(cè)腳本設(shè)計的腳本語言, 譬如JavaScript?、JScript?和ActionScript?。例如,JavaScript?是用于在網(wǎng)頁瀏覽器中 操控HTML文檔且被采用在多種web應(yīng)用中的流行腳本語言,由于缺乏合適的編程模型而一 般受限于順序執(zhí)行。由此,數(shù)據(jù)并行性在web應(yīng)用中一般尚未可實現(xiàn)。
【專利附圖】
【附圖說明】
[0004] 要求保護(hù)的主題的特征和優(yōu)勢將從與其一致的實施例的下列詳細(xì)描述中變得顯 而易見,該描述應(yīng)當(dāng)參考附圖加以考慮,在附圖中:
[0005] 圖1是示出了與本公開的各種實施例一致的用于在瀏覽器內(nèi)web應(yīng)用的并行計算 期間管理共享存儲器的系統(tǒng)的一個實施例的方框圖;
[0006] 圖2是更加詳細(xì)地示出了圖1的系統(tǒng)的客戶端設(shè)備的一個實施例的方框圖;
[0007] 圖3是示出了與本公開的各種實施例一致的存儲器管理模塊和共享存儲器的一 個實施例的方框圖:以及
[0008] 圖4是依照本公開的至少一個實施例的示例操作的流程圖。
[0009] 盡管以下的【具體實施方式】將在對示出的實施例進(jìn)行參考的情況下進(jìn)行,但其很多 替代物、修改和變形對所屬領(lǐng)域技術(shù)人員來說將是顯而易見的。
【具體實施方式】
[0010] 作為概覽,本公開總體涉及用于瀏覽器內(nèi)web應(yīng)用的并行計算的自動存儲器管理 的系統(tǒng)和方法。與本公開一致的系統(tǒng)和方法可以與確定性并行編程模型結(jié)合使用,該確定 性并行編程模型被配置成實現(xiàn)用于瀏覽器內(nèi)web應(yīng)用的數(shù)據(jù)并行性。確定性并行編程模型 可以被配置成通過在熟悉的JavaScript編程范式的界限內(nèi)發(fā)揮多核處理器的向量指令和 (PU核的優(yōu)勢來實現(xiàn)用于瀏覽器內(nèi)web應(yīng)用的數(shù)據(jù)并行性。更特別地,確定性并行編程模 型可以被配置成采用在運行時被轉(zhuǎn)換為低層級硬件抽象層的確定性數(shù)據(jù)并行構(gòu)造來擴(kuò)展 JavaScript,以實現(xiàn)與順序執(zhí)行JavaScript相比速度的實質(zhì)增加。據(jù)此,采用確定性并行 編程模型擴(kuò)展JavaScript可以允許更加計算密集的應(yīng)用(譬如例如照片編輯和視頻游戲) 在網(wǎng)頁瀏覽器中時被訪問,這對于生產(chǎn)率程序員(尤其是以JavaScript工作的web應(yīng)用程 序員)來說可能是有用的。
[0011] 在多核處理器上的應(yīng)用的并行處理期間,兩個或更多CPU核均協(xié)力地執(zhí)行一個或 多個進(jìn)程(程序或指令集),其中進(jìn)程可以執(zhí)行一個或多個線程,每個線程代表經(jīng)過應(yīng)用的 代碼的單個執(zhí)行路徑。應(yīng)用的線程中的兩個或更多可能能夠同時執(zhí)行,其中每個CPU核運 行特定線程。對應(yīng)用的線程來說,在并發(fā)執(zhí)行期間共享資源(譬如例如存儲器)是常見的。 并發(fā)執(zhí)行可以指代應(yīng)用的兩個或更多線程的同時執(zhí)行。共享存儲器可以是傳遞數(shù)據(jù)的高效 手段。
[0012] 作為如前所描述的那樣采用確定性并行編程模型擴(kuò)展JavaScript的結(jié)果, JavaScript可以采用共享存儲器并發(fā)構(gòu)造。與共享存儲器相關(guān)的一個挑戰(zhàn)是:確保不同計 算執(zhí)行之間的交互或通信的正確定序以及協(xié)調(diào)對在執(zhí)行之間共享的存儲器的訪問。在一 些公共軟件開發(fā)模型下,軟件開發(fā)商花費大量時間在應(yīng)用內(nèi)以別和試圖正確地同步并行線 程。例如,開發(fā)商可以明確地使用鎖、旗語、屏障或其它同步機(jī)制來控制對共享存儲器的訪 問。一般地,當(dāng)線程訪問共享存儲器時,同步機(jī)制通過掛起其它線程來防止那些其它線程訪 問共享存儲器,直至資源變?yōu)榭捎谩?br>
[0013] 如前所述,用于擴(kuò)展JavaScript的一些確定性并行編程模型允許在確定性運行 時執(zhí)行環(huán)境中對瀏覽器內(nèi)web應(yīng)用的執(zhí)行,由此采用共享存儲器構(gòu)造解決同步問題。術(shù)語 "確定性"一般指代預(yù)測或指定程序或環(huán)境的行為的能力。瀏覽器內(nèi)web應(yīng)用的確定性多 重處理和執(zhí)行可以減輕web應(yīng)用程序員上的必須同步對共享存儲器的線程訪問的負(fù)擔(dān)。然 而,為了確保確定性多重處理,由于一些確定性并行編程模型向JavaScript添加只讀數(shù)據(jù) 結(jié)構(gòu),因此無論何時線程正在并發(fā)運行,對共享存儲器的訪問都受限且局限于只讀。
[0014] 用于擴(kuò)展JavaScript的當(dāng)前確定性并行編程模型可能在共享存儲器的管理上施 加壓力。例如,在計算系統(tǒng)中,數(shù)據(jù)可以以被分配有共享存儲器一部分中的空間的"對象"的 形式存儲。在很多計算機(jī)環(huán)境中,在程序或應(yīng)用的執(zhí)行期間,動態(tài)地(即,在根據(jù)需要的基 礎(chǔ)上)創(chuàng)建或"分配"對象。此外,考慮到計算機(jī)中可用的存儲器的量是有限的,還提供了 用于移除或"解除分配"未使用的對象的某種機(jī)制,典型地通過使用特定程序指令或通過被 稱為廢物收集的自動化處理。
[0015] 然而,動態(tài)存儲器管理的主要缺點是與分配和解除分配對象這兩者相關(guān)的附加 "開銷"。分配和解除分配對象均需要計算機(jī)執(zhí)行可處于在程序或應(yīng)用的執(zhí)行期間執(zhí)行的實 際高產(chǎn)操作之外的某些操作,由此延遲了高產(chǎn)操作的性能。此外,動態(tài)存儲器管理還可能 導(dǎo)致"不可變的"對象(例如,在其被創(chuàng)建之后不能修改的對象)。大量的冗余的"不可變 的"對象的創(chuàng)建和隨后的解除分配減小了可用的存儲并引入了處理開銷,這兩者都降低了 性能。由此,采用當(dāng)前確定性并行編程模型,在通過具有在副本之間需要極少或不需要相干 性的不可變的對象而使得可用的優(yōu)化與由于不能變化和重用已經(jīng)分配的對象而在存儲器 管理上施加的壓力之間可能存在沖突。
[0016]與本公開一致的系統(tǒng)和方法被配置成提供共享存儲器的管理,以在瀏覽器內(nèi)web 應(yīng)用的并行處理期間在客戶端設(shè)備的計算系統(tǒng)上使用。系統(tǒng)包括存儲器管理模塊,其被配 置成監(jiān)測瀏覽器內(nèi)web應(yīng)用線程執(zhí)行,并管理被分配和存儲在關(guān)于線程執(zhí)行的共享存儲器 內(nèi)的對象的生命周期。共享存儲器堆可以被劃分為包括幼稚堆和成熟堆(例如,全局區(qū)域) 以及具有多個私用幼稚區(qū)(nursery)(例如,局部區(qū)域)的數(shù)據(jù)庫。在web應(yīng)用的一個或多 個衍生線程的執(zhí)行期間,每一個衍生線程均被提供了對在其中分配和操控對象的相應(yīng)的空 的私用幼稚區(qū)的訪問。
[0017]在衍生線程用完相關(guān)私用幼稚區(qū)中的可用空間且需要附加存儲器空間的情況下, 衍生線程可以獲得對具有一部分未使用的可用的存儲器空間的單獨私用幼稚區(qū)(例如,部 分使用的私用幼稚區(qū))的訪問,以便完成分配需求。在部分使用的私用幼稚區(qū)不可用的情 況下,衍生線程仍然休眠,至少直到另一個衍生線程完成執(zhí)行并提供部分使用的私用幼稚 區(qū),或直到所有未完成衍生線程在分配時休眠。由于系統(tǒng)內(nèi)的存儲器空間可能是有限的,因 此對部分使用的存儲器的利用提供了更高效且更不浪費的線程執(zhí)行手段。
[0018] 存儲器管理模塊進(jìn)一步包括廢物收集器模塊,其被配置成在一個或多個廢物收集 周期期間提供共享存儲器的全局和局部區(qū)域的廢物收集。一個或多個廢物收集周期基于安 全點方案,其中每個衍生線程可以到達(dá)由衍生線程的執(zhí)行狀態(tài)(例如,正在運行,休眠,完 成)確定的安全點(例如,衍生線程執(zhí)行中廢物收集是安全的點)。根據(jù)安全點方案,如果 衍生線程正在運行,那么系統(tǒng)正在進(jìn)步,并且衍生線程沒有到達(dá)安全點。如果衍生線程休眠 或已經(jīng)完成執(zhí)行,那么衍生線程已經(jīng)到達(dá)安全點。為了使廢物收集周期發(fā)起,所有的衍生線 程必須均到達(dá)安全點(例如,每個衍生線程必須是休眠的或完成的),并且如果衍生線程中 的一個正在運行,那么廢物收集不會發(fā)生。安全點方案允許安全點的最小集個以允許廢物 收集,并提供了廢物收集總體上不會與系統(tǒng)的進(jìn)步發(fā)生干擾。
[0019] 轉(zhuǎn)至圖1,總體上示出了與本公開一致的系統(tǒng)10的一個實施例。系統(tǒng)10包括客戶 端設(shè)備10,其被配置成經(jīng)由網(wǎng)絡(luò)16與媒體源14通信??蛻舳嗽O(shè)備12可以包括但不限于個 人計算機(jī)(PC),上網(wǎng)本,平板,智能電話,便攜式數(shù)字助理(PDA),便攜式媒體播放器(PMP), 和移動電話,和其它計算設(shè)備。
[0020] 客戶端沒備12可以被配置成經(jīng)由網(wǎng)絡(luò)16訪問由媒體源14提供的內(nèi)容。網(wǎng)絡(luò)16 可以是承載數(shù)據(jù)的任意網(wǎng)絡(luò)??捎米骶W(wǎng)絡(luò)16的合適網(wǎng)絡(luò)的非限制性示例包括互聯(lián)網(wǎng),專用 網(wǎng),虛擬專用網(wǎng)絡(luò)(VPN),公共交換電話網(wǎng)絡(luò)(PSTN),綜合服務(wù)數(shù)字網(wǎng)絡(luò)(ISDN),數(shù)字訂戶 鏈路網(wǎng)絡(luò)OSL),無線數(shù)據(jù)網(wǎng)絡(luò)(例如,蜂窩電話網(wǎng)絡(luò)),能夠承載數(shù)據(jù)的其它網(wǎng)絡(luò),和它們 的組合。在一些實施例中,從互聯(lián)網(wǎng),至少一個無線網(wǎng)絡(luò),至少一個蜂窩電話網(wǎng)絡(luò),和安們的 組合中選取網(wǎng)絡(luò)16。非限制地,網(wǎng)絡(luò)16優(yōu)選地為互聯(lián)網(wǎng)。媒體源14可以包括但不限于公 共和專用網(wǎng)站,社交網(wǎng)絡(luò)網(wǎng)站,音頻和/或視頻網(wǎng)站,它們的組合,和可提供在客戶端設(shè)備 12上可執(zhí)行的內(nèi)容(譬如例如web應(yīng)用)的類似物。
[0021] 現(xiàn)在轉(zhuǎn)至圖2,總體上更加詳細(xì)地示出了圖1的系統(tǒng)10的框圖。如圖所示,客戶端 設(shè)備12可以包括計算系統(tǒng)18。計算系統(tǒng)18可以包括多核處理器20,操作系統(tǒng)22,存儲器 24,存儲器管理模塊26,網(wǎng)絡(luò)接口 28,網(wǎng)頁瀏覽器30,編程語言引擎(例如,JavaScript引 擎32),和確定性并行編程模塊34。
[0022] 多核處理器20可以被配置成處理指令,執(zhí)行計算和管理經(jīng)過計算系統(tǒng)18的信息 流。如一般所理解的那樣,多核處理器20可以包括被配置成讀取和執(zhí)行程序指令的多個中 央處理單元(CPU)核。操作系統(tǒng)22可以被配置成在多核處理器20上運行和使用存儲器24 存儲數(shù)據(jù)。操作系統(tǒng)22可以被配置成管理資源(譬如,存儲在存儲器24中的數(shù)據(jù)),調(diào)度 任務(wù),和處理存儲器管理模塊28的操作,如在本文中更加詳細(xì)地描述的那樣。此外,操作系 統(tǒng)22還可以被配置成以所屬領(lǐng)域普通技術(shù)人員眾所周知的方式管理計算系統(tǒng)18的其它任 務(wù)。與本公開一致的系統(tǒng)可以包括任意已知的操作系統(tǒng)22。
[0023] 如可以理解的那樣,操作系統(tǒng)22可以包括被配置成執(zhí)行調(diào)度的任意已知的硬件 和/或軟件。例如,在一個實施例中,操作系統(tǒng)22可以包括調(diào)度器(未示出)。如一般所理 解的那樣,調(diào)度是借以向線程、進(jìn)程或數(shù)據(jù)流給予對系統(tǒng)資源(例如,處理器時間,通信帶 寬)的訪問的方法。操作系統(tǒng)22中的進(jìn)程(例如,應(yīng)用)可以包括一個或多個線程,每一 個線程均代表經(jīng)過應(yīng)用的代碼的單個執(zhí)行路徑。調(diào)度器可以包括下述指令和/或邏輯,其 給多核處理器20的相應(yīng)CPU核指派線程并調(diào)度線程以在相應(yīng)的CPU核上執(zhí)行。
[0024] 在應(yīng)用的一個或多個線程的執(zhí)行期間,存儲器24可以由存儲器管理模塊26管理。 更特別地,存儲器管理模塊26可以被配置成監(jiān)測線程執(zhí)行和管理被分配和存儲在存儲器 24內(nèi)的對象的生命周期,從而通過移除未使用的對象來釋放至關(guān)重要的存儲器空間,如在 本文中更加詳細(xì)地描述的那樣。
[0025] 網(wǎng)絡(luò)接口 26可以被配置成允許客戶端設(shè)備12經(jīng)由網(wǎng)絡(luò)16與媒體源14通信和交 換信息。例如,在一個實施例中,用戶可以從媒體源14訪問web應(yīng)用,以在客戶端設(shè)備12 上執(zhí)行。web應(yīng)用一般可以指代以與瀏覽器呈現(xiàn)的標(biāo)記語言(譬如HTML)結(jié)合的瀏覽器支 持的語言(譬如,例如,JavaScript)編碼的計算機(jī)軟件應(yīng)用。web應(yīng)用可以是基于瀏覽器 的,使得web應(yīng)用可以依賴于網(wǎng)頁瀏覽器來使應(yīng)用可執(zhí)行。應(yīng)當(dāng)注意,與本公開一致的系統(tǒng) 和方法并不限于與JavaScript編程語言一起使用,并且與本公開一致的其它實施例可以 用其它已知的計算機(jī)編程語言實現(xiàn)。
[0026] 網(wǎng)頁瀏覽器30被配置成使客戶端設(shè)備12的用戶能夠訪問、檢索和查看互聯(lián)網(wǎng)上 的文檔和其它資源。如一般所理解的那樣,網(wǎng)頁瀏覽器30可以包括用于從媒體源14 (特別 是萬維網(wǎng))檢索、呈現(xiàn)和遍歷信息資源的軟件應(yīng)用。在示出的實施例中,網(wǎng)頁瀏覽器30被 配置成執(zhí)行來自媒體源14的web應(yīng)用和允許用戶訪問關(guān)于web應(yīng)用的內(nèi)容(例如,文本, 圖像,和其它信息)并與關(guān)于web應(yīng)用的內(nèi)容交互。在一個實施例中,網(wǎng)頁瀏覽器可以包括 由MozillaCorporation提供的Firefox?。應(yīng)當(dāng)注意,網(wǎng)頁瀏覽器可以包括任意其它的已 知網(wǎng)頁瀏覽器,其包括但不限于 InternetExplorer?、Opera?、Netscape?和Safari?。
[0027] JavaScript引擎32被配置成在網(wǎng)頁瀏覽器30的運行時系統(tǒng)內(nèi)解釋和執(zhí)行web應(yīng) 用代碼(例如,web應(yīng)用以JavaScript編碼)。如一般所理解的那樣,JavaScript引擎32 可以包括被配置成解釋和執(zhí)行JavaScript的計算機(jī)軟件。web應(yīng)用代碼的執(zhí)行可以發(fā)生在 網(wǎng)頁瀏覽器30或某種其它客戶端側(cè)程序內(nèi)。JavaScript引擎32可以包括與網(wǎng)頁瀏覽器 30兼容的任意已知JavaScript引擎。例如,在一個實施例中,JavaScript引擎32可以與 Firefox網(wǎng)頁瀏覽器30的一些或全部版本兼容。
[0028] 確定性并行編程模塊34可以被配置成實現(xiàn)用于瀏覽器內(nèi)web應(yīng)用的數(shù)據(jù)并行 性。更特別地,確定性并行編程模塊34可以被配置成采用在運行時被轉(zhuǎn)換為低層級硬件 抽象層的確定性數(shù)據(jù)并行構(gòu)造擴(kuò)展JavaScript。確定性并行編程模塊34被配置成連同 JavaScript引擎32 -起操作,以便通過發(fā)揮多核處理器20的至少多個CPU核和/或向量 指令的優(yōu)勢來允許瀏覽器內(nèi)web應(yīng)用的并行處理。由此,確定性并行編程模塊34可以被配 置成修改JavaScript引擎32,其中,在運行時,經(jīng)修改的JavaScript引擎32被配置成自動 地發(fā)現(xiàn)和適配于可用的任何并行處理資源。例如,經(jīng)修改的JavaScript引擎32可以被配 置成使用CPU的向量算術(shù)指令,多個CPU核,每核多個線程和/或系統(tǒng)的多個處理器。
[0029] 轉(zhuǎn)至圖3,總體上示出了與本公開的各種實施例一致的存儲器管理模塊26和存儲 器24的一個實施例的框圖。如本文先前所描述的那樣,操作系統(tǒng)22可以包括調(diào)度器,其被 配置成給多核處理器20的相應(yīng)CPU核指派線程并調(diào)度線程以在相應(yīng)的CPU核上執(zhí)行。據(jù) 此,與本公開的一個實施例一致,瀏覽器內(nèi)web應(yīng)用的一個或多個處理功能可以被分成多 個線程,其中每個線程可以由調(diào)度器調(diào)度以在多核處理器20的相應(yīng)CPU核上執(zhí)行。
[0030] web應(yīng)用一般可以以單個線程(例如,主線程36)開始,該單個線程可以運行web 應(yīng)用的主功能。web應(yīng)用可以衍生附加線程(例如,衍生線程38(l)-38(n)),每一個附加線 程均執(zhí)行特定功能的代碼。衍生線程38(l)-38(n)中的每一個變?yōu)閣eb應(yīng)用的進(jìn)程空間內(nèi) 部的獨立實體。如所屬領(lǐng)域技術(shù)人員一般所理解的那樣,每個線程可以包括執(zhí)行堆棧(未 示出),并可以針對運行時由內(nèi)核(未示出)單獨調(diào)度。如先前所描述的那樣,采用確定性 并行編程模塊34修改JavaScript引擎32實現(xiàn)了 web應(yīng)用的數(shù)據(jù)并行性。據(jù)此,web應(yīng)用 的一些線程均可能能夠在單獨的相關(guān)CPU核上并發(fā)地執(zhí)行。
[0031] 在示出的實施例中,線程(主線程36和衍生線程38(l)-38(n))共享存儲器24。 更特別地,存儲器的塊集合或鄰接區(qū)域可以被分發(fā)給線程以用于執(zhí)行。如圖所示,存儲器24 的堆空間可以被劃分為至少幼稚堆40和成熟堆42。幼稚堆40可以包括存儲器的小區(qū)域, 其中,新對象被創(chuàng)建(例如,分配)且被存儲達(dá)相對短的時間段(例如,數(shù)秒)。通常,存儲 在幼稚堆40中的對象一般具有低壽命預(yù)期。成熟堆42可以包括相對大的存儲器區(qū)域,其 中,對象可以生存直到不再有用。存儲器24可以進(jìn)一步包括衍生線程幼稚區(qū)數(shù)據(jù)庫44,其 具有存儲在其內(nèi)的私用幼稚區(qū)46 (1)-46 (n)。通常,在執(zhí)行期間,有區(qū)別的主線程36可以在 幼稚堆40中分配一個或多個對象,并寫入對存儲在幼稚堆40以及成熟堆42中的一個或多 個對象的參考。衍生線程38(l)-38(n)中的每一個均具有對衍生線程幼稚區(qū)數(shù)據(jù)庫44的 相關(guān)私用幼稚區(qū)46(l)-46(n)的訪問。更特別地,當(dāng)線程被衍生時,衍生線程被提供有對在 其中分配和操控對象的相應(yīng)的空的私用幼稚區(qū)的訪問。衍生線程38(l)-38(n)被允許讀取 幼稚堆40和成熟堆42,但不被允許寫入到幼稚堆40或成熟堆42中。
[0032] 如前面描述的那樣,存儲器管理模塊26被配置成監(jiān)測線程執(zhí)行和管理被分配和 存儲在存儲器24內(nèi)的對象的生命周期。存儲器管理模塊26可以包括例如被配置成執(zhí)行廢 物收集的廢物收集器模塊48。廢物收集可以指代被配置成回收主體應(yīng)用程序不會再次訪問 或操控的數(shù)據(jù)對象所使用的資源(譬如,例如,存儲器)的自動形式的存儲器管理。據(jù)此, 廢物收集模塊48可以被配置成解除分配存儲器24中的未使用對象,以便針對新的對象分 配釋放至關(guān)重要的存儲器空間。
[0033] 廢物收集模塊48可以被配置成確定web應(yīng)用中的哪些數(shù)據(jù)對象未來不會被訪問, 并回收由這些對象使用的資源。更特別地,廢物收集器模塊48可以被配置成確定是否在 web應(yīng)用的執(zhí)行過程中需要對象。廢物收集器模塊48可以進(jìn)一步被配置成通過在廢物收 集周期期間解除分配來自例如衍生線程幼稚區(qū)數(shù)據(jù)庫44的幼稚堆40,成熟堆44和/或一 個或多個私用幼稚區(qū)46(l)-46(n)的對象來釋放對應(yīng)于對象的存儲器24內(nèi)的空間。一般 地,廢物收集周期指代在其期間廢物收集模塊48執(zhí)行廢物收集的時段。如在本文中更加詳 細(xì)地描述的那樣,廢物收集周期可以是基于web應(yīng)用的線程中的每一個的執(zhí)行狀態(tài)來確定 的。更特別地,由廢物收集器模塊48對廢物收集周期的發(fā)起取決于每一個線程的所識別的 執(zhí)行狀態(tài),在本文中更加詳細(xì)地描述。
[0034] 在一個或多個衍生線程38 (1) -38 (n)的執(zhí)行期間,有區(qū)別的主線程36可以保持休 眠。在一個或多個衍生線程38(l)-38(n)的執(zhí)行期間,衍生線程38(l)-38(n)中的每一個 均可以對相關(guān)的空的私用幼稚區(qū)46(l)-46(n)訪問和分配一個或多個對象。當(dāng)被創(chuàng)建時, 這種對象被視為線程本地。如先前描述的那樣,存儲器24被配置為共享存儲器。由此,衍 生線程38不能通過在對其它衍生線程38來說可見的存儲器24的區(qū)域中安裝指針(例如, 對象在存儲器24中的指示位置的參考)來從相關(guān)的私用幼稚區(qū)46公布一個或多個對象。 這維持了下述不變量:衍生線程不能訪問由衍生同級物操控的值。一旦執(zhí)行完成,衍生線程 38可以將新分配的對象返回至主線程36或潛在地返回至另一個衍生線程。在這兩種情況 中的任一種情況下,這種對象將存儲在相關(guān)的私用幼稚區(qū)46中。在一些實例中,一旦完成, 相關(guān)的私用幼稚區(qū)46可以具有附加空間可用,并可以被稱作部分使用的私用幼稚區(qū)。
[0035] 如果在執(zhí)行期間衍生線程38用完相關(guān)私用幼稚區(qū)46中的可用空間,并需要附加 的存儲器空間,則衍生線程38可以被配置成請求附加的存儲器塊以擴(kuò)充相關(guān)的私用幼稚 區(qū)46。衍生線程38還可以被配置成從衍生線程幼稚區(qū)數(shù)據(jù)庫44請求對部分使用的私用幼 稚區(qū)的訪問。例如,在與衍生線程38(1)相關(guān)的私用幼稚區(qū)46(1)用完可用空間的情況下, 衍生線程38(1)可以請求并獲得對部分使用的私用幼稚區(qū)(譬如,例如,私用幼稚區(qū)46(2)) 的訪問,以便繼續(xù)線程執(zhí)行。如果請求成功,則衍生線程38(1)可以獲得對部分使用的私用 幼稚區(qū)46(2)的剩余可用存儲器空間的訪問并繼續(xù)分配部分使用的私用幼稚區(qū)46(2)的剩 余可用存儲器空間中的一個或多個對象。在部分使用的私用幼稚區(qū)不可用的情況下,衍生 線程38可以保持休眠,至少直到另一個衍生線程完成執(zhí)行并提供部分使用的私用幼稚區(qū), 或直到所有未完成的衍生線程在分配時休眠。
[0036] -般地,衍生線程38(1)-38 (n)中的每一個可以具有至少一個執(zhí)行狀態(tài)。執(zhí)行狀 態(tài)可以包括運行狀態(tài)、休眠狀態(tài)和完成狀態(tài)。取決于一個或多個衍生線程38(l)-38(n)的 當(dāng)前執(zhí)行狀態(tài),廢物收集器模塊48可以被配置成發(fā)起廢物收集周期。例如,在一個實施例 中,為了發(fā)起廢物收集周期,所有的衍生線程38(l)-38(n)必須到達(dá)安全點。針對線程的 安全點是線程的執(zhí)行中的下述點:其中,能夠針對指針精確地掃描線程的堆棧,并且廢物收 集是安全的。衍生線程的當(dāng)前執(zhí)行狀態(tài)指示線程是否已經(jīng)到達(dá)安全點。例如,如果衍生線 程休眠或已經(jīng)完成執(zhí)行,那么衍生線程已經(jīng)到達(dá)安全點。如果衍生線程正在運行(即,沒 有完成,也沒有休眠,并且正在進(jìn)步),那么系統(tǒng)正在進(jìn)步并且衍生線程沒有到達(dá)安全點。 據(jù)此,如果所有的衍生線程38 (1) -38 (n)休眠或完成,那么所有的衍生線程38 (1) -38 (n) 已經(jīng)到達(dá)安全點,并且廢物收集器模塊48能夠發(fā)起廢物收集。如果一個或多個衍生線程 38 (1)-38 (n)正在運行,那么正在運行的衍生線程沒有到達(dá)安全點,并且廢物收集器模塊 48不發(fā)起廢物收集。
[0037] 最終,所有的衍生線程38(l)_38(n)將不可避免地到達(dá)安全點。一旦所有的衍 生線程完成并且在休眠主線程被恢復(fù)之前,來自衍生線程幼稚區(qū)數(shù)據(jù)庫44的私用幼稚區(qū) 46 (1) -46 (n)被置于幼稚堆40上,其中,在下一個廢物收集周期期間,主線程的幼稚區(qū)和衍 生線程的私用幼稚區(qū)可以被簡單地視為用于廢物收集的目的的幼稚區(qū)。
[0038] 由于衍生線程不能看到同級物衍生線程的工作,因此衍生線程不能取決于另一個 衍生線程,且在同級物線程變?yōu)樾菝叩那闆r下不會被阻塞。如果不存在衍生線程,那么主線 程自由進(jìn)步。由此,至少一個線程在所有的時間處自由地執(zhí)行,由此確保系統(tǒng)將始終向前 進(jìn)。
[0039] 廢物收集器模塊48可以被配置成通過所屬領(lǐng)域技術(shù)人員一般所理解的一個或多 個廢物收集方法在私用幼稚區(qū)46(1)-46 (n)以及幼稚堆40上執(zhí)行廢物收集。廢物收集器 模塊48可以被配置成檢測對應(yīng)于相關(guān)分配對象的一個或多個存儲器塊,并確定相關(guān)分配 對象未來是否將被訪問。如果確定在web應(yīng)用的執(zhí)行過程中不需要對象,則廢物收集器模 塊48可以被配置成從存儲器解除分配(例如,移除)對象,并從而釋放更多的可用存儲器 以用于未來分配。應(yīng)當(dāng)注意到,廢物收集器模塊48可以被配置成執(zhí)行僅幼稚區(qū)廢物收集和 全局廢物收集。在僅幼稚區(qū)廢物收集中,廢物收集器模塊48被配置成在至少私用幼稚區(qū) 46 (1)-46 (n)上執(zhí)行廢物收集。在全局廢物收集中,廢物收集器模塊48被配置成在幼稚堆 40和私用幼稚區(qū)46(l)-46(n)以及成熟堆42中執(zhí)行廢物收集。在示出的實施例中,由于當(dāng) 衍生線程正在運行時掛起向全局區(qū)域(例如,幼稚堆40,成熟空間42)中的分配,因此當(dāng)任 意局部區(qū)域(例如,私用幼稚區(qū)46(l)-46(n))保持對象時不存在收集全局區(qū)域的需要。
[0040] 圖4是依照與本公開一致的至少一個實施例的示例操作的流程圖。在操作402中, 可以發(fā)起應(yīng)用(例如,瀏覽器內(nèi)web應(yīng)用)的線程(例如,衍生線程)的執(zhí)行。線程的執(zhí)行 的發(fā)起可以后跟操作404中的存儲器塊的獲取。存儲器塊可以包括來自幼稚區(qū)數(shù)據(jù)庫(例 如,衍生線程幼稚區(qū)數(shù)據(jù)庫44)的私用幼稚區(qū)(例如,私用幼稚區(qū)46(1)-46 (n)),其中衍生 線程可以在線程執(zhí)行期間訪問。在操作406中,線程執(zhí)行的計算進(jìn)行。
[0041] 然后,在操作408中可以做出線程的執(zhí)行是否完成的確定。如果在操作408中確 定執(zhí)行完成,那么在操作410中可以做出存儲器塊是否部分為空的確定。如果在操作410 中確定存儲器塊部分為空,那么在操作412中返回部分為空的存儲器塊,并且線程可以在 操作414中進(jìn)入廢物收集(GC)安全狀態(tài)。否則,線程可以在操作414中進(jìn)入GC安全狀態(tài)。 GC安全狀態(tài)是線程的執(zhí)行中存儲器塊的廢物收集安全進(jìn)行的點。
[0042] 如果在操作408中確定線程的執(zhí)行未完成,那么在操作416中可以做出是否需要 存儲器塊中的分配的確定。如果在操作416中確定需要分配,那么在操作418中在存儲器 塊的一部分中創(chuàng)建對象。否則,如果在操作416中確定不需要分配,那么操作406-408可以 重復(fù)。
[0043] 一旦在操作418中在存儲器塊的一部分中創(chuàng)建對象,那么在操作420中可以做出 由線程進(jìn)行的分配是否成功的確定。如果在操作420中確定分配成功,那么操作406-408 可以重復(fù)。否則,如果在操作420中確定分配不成功,則在操作422中可以做出空的存儲器 塊是否可用的確定。初始的存儲器塊可能用盡可用的存儲器空間,并且線程可能需要附加 的存儲器空間,以便完成分配。如果在操作422中確定附加的空的存儲器塊可用,那么獲取 附加的空的存儲器塊,并且附加的空的存儲器塊中的分配進(jìn)行,其中在操作424中在附加 的空的存儲器塊中創(chuàng)建對象,并且操作420可以重復(fù)。
[0044] 如果在操作422中確定附加的空的存儲器塊不可用,那么在操作426中可以做出 部分為空的存儲器塊是否可用的確定。例如,線程可以被配置成請求對部分使用的存儲器 塊(例如,來自衍生線程幼稚區(qū)數(shù)據(jù)庫44的部分使用的私用幼稚區(qū))的訪問。如果在操作 426中確定部分為空的存儲器塊可用,那么獲取該部分為空的存儲器塊,并且部分為空的存 儲器塊中的分配進(jìn)行,其中在操作428中在部分使用的存儲器塊中的剩余可用空間中創(chuàng)建 對象,并且操作420可以重復(fù)。否則,如果確定部分為空的存儲器塊不可用,那么在操作430 中線程可以進(jìn)入GC安全狀態(tài),并且操作422可以重復(fù)。
[0045] 盡管圖4示出了根據(jù)實施例的各種操作,但是應(yīng)當(dāng)理解,并非圖4中描繪的所有操 作都是其它實施例所必需的。的確,本文完全可以預(yù)期,在本公開的其它實施例中,圖4中 描繪的操作和/或本文描述的其它操作可以以未在任何附圖中具體示出但仍與本公開完 全一致的方式組合。因此,涉及未在一幅圖中精確示出的特征和/或操作的權(quán)利要求被視 為落入本公開的范圍和內(nèi)容之內(nèi)。
[0046] 此外,實施例的操作已經(jīng)參照上面的附圖和伴隨的示例進(jìn)一步加以描述。一些附 圖可以包括邏輯流程。盡管本文呈現(xiàn)的這種附圖可以包括特定的邏輯流程,但是可以理解, 該邏輯流程僅提供本文描述的一般功能可以被如何實現(xiàn)的示例。進(jìn)一步地,給出的邏輯流 程沒有必要必須以呈現(xiàn)的順序執(zhí)行,除非另作指示。此外,給定的邏輯流程可以由硬件元 件、處理器所執(zhí)行的軟件元件或它們的任意組合實現(xiàn)。實施例并不限于該上下文。
[0047] 各種特征、方面和實施例已經(jīng)在本文中加以描述。特征、方面和實施例容易彼此組 合,以及容易變形和修改,如所屬領(lǐng)域技術(shù)人員將理解的那樣。因此,本公開應(yīng)當(dāng)被視為包 含這種組合、變形和修改。因此,本發(fā)明的廣度和范圍不應(yīng)受上述的示例性實施例中的任一 個限制,而是應(yīng)當(dāng)僅依照以下的權(quán)利要求和它們的等價物加以限定。
[0048]如在本文任意實施例中所使用的那樣,術(shù)語"模塊"可以指代被配置成執(zhí)行任意上 述操作的軟件、固件和/或電路。軟件可以被體現(xiàn)為被記錄在非暫時性計算機(jī)可讀存儲介 質(zhì)上的軟件包、代碼、指令、指令集和/或數(shù)據(jù)。固件可以被體現(xiàn)為被硬編碼(例如,非易失 性)在存儲器設(shè)備中的代碼、指令或指令集和/或數(shù)據(jù)。"電路",如在本文任意實施例中所 使用的那樣,可以例如單個地或以任意組合包括硬連線電路、可編程電路(譬如包括一個 或多個個體指令處理核的計算機(jī)處理器)、狀態(tài)機(jī)電路、和/或存儲由可編程電路執(zhí)行的指 令的固件。模塊可以共同地或個體地被體現(xiàn)為形成更大系統(tǒng)(例如,集成電路(1C),片上系 統(tǒng)(SoC),臺式計算機(jī),膝上型計算機(jī),平板計算機(jī),服務(wù)器,智能手機(jī),等等)的一部分的電 路。
[0049]本文描述的任意操作可以在包括一個或多個存儲介質(zhì)的系統(tǒng)中實現(xiàn),該存儲介質(zhì) 在其上個體地或組合地存儲有在由一個或多個處理器執(zhí)行時執(zhí)行該方法的指令。此處,處 理器可以包括例如服務(wù)器CPU、移動設(shè)備CPU和/或其它可編程電路。此外,意圖在于,本 文描述的操作可以跨多個物理設(shè)備分布,譬如,處于多于一個不同物理位置的處理結(jié)構(gòu)。存 儲介質(zhì)可以包括任意類型的有形介質(zhì),例如,任意類型的盤,包括硬盤、軟盤、光盤、壓縮盤 只讀存儲器(CD-ROM)、壓縮盤可重寫盤(CD-RW)和磁光盤、半導(dǎo)體器件(譬如只讀存儲器 (ROM),隨機(jī)存取存儲器(RAM),譬如動態(tài)和靜態(tài)RAM,可擦除可編程只讀存儲器(EPROM),電 可擦除可編程只讀存儲器(EEPR0M),閃存,固態(tài)盤(SSD),磁或光卡)、或適合存儲電子指令 的任意類型的介質(zhì)。其它實施例可以被實現(xiàn)為由可編程控制設(shè)備執(zhí)行的軟件模塊。存儲介 質(zhì)可以為非暫時性的。
[0050] 本文中已經(jīng)采用的術(shù)語和表述被用作描述而非限制的術(shù)語,并且在這種術(shù)語和表 述的使用中不旨在排除所示出和描述的特征(或其部分)的任何等同物,并且應(yīng)當(dāng)認(rèn)識到, 各種修改在權(quán)利要求書的范圍內(nèi)是可能的。據(jù)此,權(quán)利要求書旨在涵蓋所有這種等同物。各 種特征、方面和實施例已在本文中加以描述。這些特征、方面和實施例容易相互組合以及容 易變形和修改,如本領(lǐng)域技術(shù)人員將理解的那樣。因此,本公開應(yīng)當(dāng)被視為涵蓋這種組合、 變形和修改。
[0051] 如本文所描述的那樣,各種實施例可以使用硬件元件、軟件元件或它們的任意組 合實現(xiàn)。硬件元件的示例可以包括處理器、微處理器、電路、電路元件(例如,晶體管,電阻 器,電容器,電感器,等等)、集成電路、專用集成電路(ASIC)、可編程邏輯器件(PLD)、數(shù)字 信號處理器OSP)、現(xiàn)場可編程門陣列(FPGA)、邏輯門、寄存器、半導(dǎo)體器件、芯片、微芯片、 芯片組等等。
[0052] 貫穿本說明書對"一個實施例"或"一實施例"的引用意味著結(jié)合該實施例描述的 特定特征、結(jié)構(gòu)或特性被包括在至少一個實施例中。因此,貫穿本說明書各處出現(xiàn)短語"在 一個實施例中"或"在一實施例中"不一定均指代同一實施例。此外,特定特征、結(jié)構(gòu)或特性 可按照任何合適的方式在一個或多個實施例中組合。
[0053] 根據(jù)一個方面,提供了一種用于web應(yīng)用的并行計算的自動存儲器管理的裝置。 該裝置包括:處理器,具有至少兩個計算機(jī)處理單元(CPU)核;和操作系統(tǒng),被配置成給處 理器的相應(yīng)CPU核指派web應(yīng)用的處理功能的一個或多個線程,以在相應(yīng)的CPU核上并發(fā) 執(zhí)行。一個或多個線程包括第一線程和至少一個衍生線程。
[0054] 計算系統(tǒng)進(jìn)一步包括存儲器,其具有塊集合,該塊集合被分發(fā)給第一線程和至少 一個衍生線程。存儲器被劃分為幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫。第一線 程具有對幼稚堆和成熟堆的訪問。第一線程被配置成在幼稚堆中分配和操控一個或多個對 象,并寫入對存儲在幼稚堆和成熟堆中的一個或多個對象的參考。該至少一個衍生線程具 有對多個私用幼稚區(qū)中的相關(guān)的一個的訪問。該至少一個衍生線程被配置成在相關(guān)的私用 幼稚區(qū)內(nèi)分配和操控一個或多個對象。
[0055] 另一個示例裝置包括前述部件,并且進(jìn)一步包括網(wǎng)頁瀏覽器,其被配置成執(zhí)行web 應(yīng)用。web應(yīng)用以網(wǎng)頁瀏覽器支持的腳本語言編碼。
[0056] 另一個示例裝置包括前述部件,并且腳本語言是JavaScript?。
[0057] 另一個示例裝置包括前述部件,并且進(jìn)一步包括編程語言引擎,其被配置成在網(wǎng) 頁瀏覽器的運行時系統(tǒng)內(nèi)解釋和執(zhí)行web應(yīng)用代碼。
[0058] 另一個示例裝置包括前述部件,并且進(jìn)一步包括確定性并行編程模塊,其被配置 成修改編程語言引擎,并采用在運行時被轉(zhuǎn)換為低層級硬件抽象層的確定性數(shù)據(jù)并行構(gòu)造 擴(kuò)展編程語言,以實現(xiàn)web應(yīng)用的數(shù)據(jù)并行性。
[0059] 另一個示例裝置包括前述部件,并且進(jìn)一步包括存儲器管理模塊,其被配置成監(jiān) 測至少第一線程和至少一個衍生線程的執(zhí)行,并管理被分配和存儲在存儲器的塊集合內(nèi)的 一個或多個對象的生命周期。
[0060]別一個示例裝置包括前述部件,并且存儲器管理模塊包括廢物收集器模塊,其被 配置成在廢物收集周期期間在多個私用幼稚區(qū)中的至少每一個上執(zhí)行廢物收集。
[0061] 另一個示例裝置包括前述部件,并且廢物收集器模塊被配置成至少部分地基于至 少一個衍生線程的執(zhí)行狀態(tài)發(fā)起廢物收集周期,所述執(zhí)行狀態(tài)確定至少一個衍生線程是否 到達(dá)安全點。
[0062] 另一個示例裝置包括前述部件,并且執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成 的組中選擇的。
[0063] 另一個示例裝置包括前述部件,并且當(dāng)執(zhí)行狀態(tài)是休眠或完成時,至少一個衍生 線程到達(dá)安全點,并且當(dāng)執(zhí)行狀態(tài)是正在運行時,至少一個衍生線程未能到達(dá)安全點。
[0064] 另一個示例裝置包括前述部件,并且如果多個私用幼稚區(qū)中的相關(guān)的一個具有不 足以供至少一個衍生線程完成一個或多個對象的分配的存儲器空間,則至少一個衍生線程 被配置成請求對來自多個私用幼稚區(qū)的先前使用的私用幼稚區(qū)的訪問。先前使用的私用幼 稚區(qū)具有一部分存儲器空間可用于使至少一個衍生線程分配一個或多個對象。
[0065]根據(jù)一個方面,提供了一種用于web應(yīng)用的并行計算的自動存儲器管理的系統(tǒng)。 所述系統(tǒng)包括媒體源和客戶端設(shè)備,該客戶端設(shè)備被配置成在網(wǎng)絡(luò)上與媒體源進(jìn)行通信, 并訪問和執(zhí)行由媒體源提供的web應(yīng)用。客戶端設(shè)備包括計算系統(tǒng),其被配置成允許web 應(yīng)用的并行計算。
[0066] 該計算系統(tǒng)包括:處理器,具有至少兩個計算機(jī)處理單元(CPU)核;和操作系統(tǒng), 被配置成給處理器的相應(yīng)CPU核指派web應(yīng)用的處理功能的一個或多個線程,以在相應(yīng)的 CPU核上并發(fā)執(zhí)行。一個或多個線程包括第一線程和至少一個衍生線程。
[0067] 計算系統(tǒng)進(jìn)一步包括存儲器,其具有塊集合,該塊集合被分發(fā)給第一線程和至少 一個衍生線程。存儲器被劃分為幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫。第一線 程具有對幼稚堆和成熟堆的訪問。第一線程被配置成在幼稚堆中分配和操控一個或多個對 象,并寫入對存儲在幼稚堆和成熟堆中的一個或多個對象的參考。該至少一個衍生線程具 有對多個私用幼稚區(qū)中的相關(guān)的一個的訪問。該至少一個衍生線程被配置成在相關(guān)的私用 幼稚區(qū)內(nèi)分配和操控一個或多個對象。
[0068] 另一個示例系統(tǒng)包括前述部件,并且進(jìn)一步包括網(wǎng)頁瀏覽器,其被配置成執(zhí)行web 應(yīng)用。web應(yīng)用以網(wǎng)頁瀏覽器支持的腳本語言編碼。
[0069] 另一個示例系統(tǒng)包括前述部件,并且進(jìn)一步包括:編程語言引擎,被配置成在網(wǎng)頁 瀏覽器的運行時系統(tǒng)內(nèi)解釋和執(zhí)行web應(yīng)用代碼;和確定性并行編程模塊,被配置成修改 編程語言引擎,并采用在運行時被轉(zhuǎn)換為低層級硬件抽象層的確定性數(shù)據(jù)并行構(gòu)造擴(kuò)展編 程語言,以便實現(xiàn)web應(yīng)用的數(shù)據(jù)并行性。
[0070] 另一個示例系統(tǒng)包括前述部件,并且進(jìn)一步包括:存儲器管理模塊,被配置成監(jiān)測 至少第一線程和至少一個衍生線程的執(zhí)行,并管理被分配和存儲在存儲器塊集合內(nèi)的一個 或多個對象的生命周期;和廢物收集器模塊,被配置成在廢物收集周期期間在多個私用幼 稚區(qū)中的至少每一個上執(zhí)行廢物收集。
[0071] 另一個示例系統(tǒng)包括前述部件,并且廢物收集器模塊被配置成至少部分地從于至 少一個衍生線程的執(zhí)行狀態(tài)發(fā)起廢物收集周期。該執(zhí)行狀態(tài)確定至少一個衍生線程是否到 達(dá)安全點。執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成的組中選擇的。
[0072] 另一個示例系統(tǒng)包括前述部件,并且如果多個私用幼稚區(qū)中的相關(guān)的一個具有不 足以供至少一個衍生線程完成一個或多個對象的分配的存儲器空間,則至少一個衍生線程 被配置成請求對來自多個私用幼稚區(qū)的先前使用的私用幼稚區(qū)的訪問。先前使用的私用幼 稚區(qū)具有一部分存儲器空間可用于使至少一個衍生線程分配一個或多個對象。
[0073] 根據(jù)另一方面,提供了包括指令存儲于其上的至少一種計算機(jī)可訪問介質(zhì)。當(dāng)由 一個或多個處理器執(zhí)行時,指令可以使計算機(jī)系統(tǒng)執(zhí)行用于web應(yīng)用的并行計算的自動存 儲器管理的操作。該操作包括:在處理器的相應(yīng)CPU核上發(fā)起web應(yīng)用的處理功能的一個 或多個線程的并發(fā)執(zhí)行。一個或多個線程包括第一線程和至少一個衍生線程。該操作進(jìn)一 步包括:在被分發(fā)給第一線程和至少一個衍生線程的共享存儲器中獲取相關(guān)的塊,該塊包 括幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫。第一線程具有對幼稚堆和成熟堆的訪 問并被配置成在幼稚堆和成熟堆內(nèi)分配和操控一個或多個對象。至少一個衍生線程具有對 多個私用幼稚區(qū)中相關(guān)的一個的訪問并被配置成在多個私用幼稚區(qū)中相關(guān)的一個內(nèi)分配 和操控一個或多個對象。該操作進(jìn)一步包括:監(jiān)測至少第一線程和至少一個衍生線程的執(zhí) 行;以及管理被分配和存儲在幼稚堆、成熟堆和存儲器的多個幼稚區(qū)中的每一個內(nèi)的一個 或多個對象的生命周期。
[0074] 另一個示例計算機(jī)可訪問介質(zhì)包括前述操作,并且進(jìn)一步包括在廢物收集周期的 發(fā)起期間在至少多個私用幼稚區(qū)上執(zhí)行廢物收集。
[0075] 另一個示例計算機(jī)可訪問介質(zhì)包括前述操作,并且廢物收集周期至少部分地基于 至少一個衍生線程的執(zhí)行狀態(tài),所述執(zhí)行狀態(tài)確定至少一個衍生線程是否到達(dá)安全點,其 中所述執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成的組中選擇的。
[0076] 另一個示例計算機(jī)可訪問介質(zhì)包括前述操作,并且進(jìn)一步包括:確定多個私用幼 稚區(qū)中相關(guān)的一個具有不足以供至少一個衍生線程完成一個或多個對象的分配的存儲器 空間;識別來自多個私用幼稚區(qū)的先前使用的私用幼稚區(qū),其具有一部分存儲器空間可用 于使至少一個衍生線程分配一個或多個對象;以及訪問先前使用的私用幼稚區(qū),并且在該 部分可用的存儲器空間內(nèi)分配一個或多個對象。
[0077] 根據(jù)另一個方面,提供了一種用于web應(yīng)用的并行計算的自動存儲器管理的方 法。該方法包括:在處理器的相應(yīng)CPU核上發(fā)起web應(yīng)用的處理功能的一個或多個線程的 并發(fā)執(zhí)行。一個或多個線程包括第一線程和至少一個衍生線程。該方法進(jìn)一步包括:在被 分發(fā)給第一線程和至少一個衍生線程的共享存儲器中獲取相關(guān)的塊,該塊包括幼稚堆、成 熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫。第一線程具有對幼稚堆和成熟堆的訪問并被配置成 在幼稚堆和成熟堆內(nèi)分配和操控一個或多個對象。至少一個衍生線程具有對多個私用幼稚 區(qū)中相關(guān)的一個的訪問并被配置成在多個私用幼稚區(qū)中相關(guān)的一個內(nèi)分配和操控一個或 多個對象。該方法進(jìn)一步包括:監(jiān)測至少第一線程和至少一個衍生線程的執(zhí)行;以及管理 被分配和存儲在幼稚堆、成熟堆和存儲器的多個幼稚區(qū)中的每一個內(nèi)的一個或多個對象的 生命周期。
[0078] 另一個示例方法包括前述操作,并且進(jìn)一步包括在廢物收集周期的發(fā)起期間在至 少多個私用幼稚區(qū)上執(zhí)行廢物收集。
[0079] 另一個示例方法包括前述操作,并且廢物收集周期至少部分地基于至少一個衍生 線程的執(zhí)行狀態(tài),所述執(zhí)行狀態(tài)確定至少一個衍生線程是否到達(dá)安全點,其中所述執(zhí)行狀 態(tài)是從由正在運行、休眠和完成構(gòu)成的組中選擇的。
[0080] 另一個示例方法包括前述操作,并且進(jìn)一步包括:確定多個私用幼稚區(qū)中相關(guān)的 一個具有不足以供至少一個衍生線程完成一個或多個對象的分配的存儲器空間;識別來自 多個私用幼稚區(qū)的先前使用的私用幼稚區(qū),其具有一部分存儲器空間可用于使至少一個衍 生線程分配一個或多個對象;以及訪問先前使用的私用幼稚區(qū),并且在該部分可用的存儲 器空間內(nèi)分配一個或多個對象。
[0081] 本文已經(jīng)采用的術(shù)語和表達(dá)被用作描述非限制的術(shù)語,并且在這種術(shù)語和表述的 使用中不旨在排除所示出和描述的特征(或其部分)的任何等同物,并且應(yīng)當(dāng)認(rèn)識到,各種 修改在權(quán)利要求書的范圍內(nèi)是可能的。據(jù)此,權(quán)利要求書旨在涵蓋所有這種等同物。
【權(quán)利要求】
1. 一種用于web應(yīng)用的并行計算的自動存儲器管理的裝置,所述裝置包括: 處理器,具有至少兩個計算機(jī)處理單元(CPU)核; 操作系統(tǒng),被配置成給所述處理器的相應(yīng)CPU核指派web應(yīng)用的處理功能的一個或多 個線程,以在所述相應(yīng)CPU核上并發(fā)執(zhí)行,所述一個或多個線程包括第一線程和至少一個 衍生線程; 存儲器,其具有塊集合,該塊集合被分發(fā)給所述第一線程和所述至少一個衍生線程,所 述存儲器被劃分為幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫; 其中所述第一線程具有對所述幼稚堆和成熟堆的訪問,所述第一線程被配置成在所述 幼稚堆中分配和操控一個或多個對象,并寫入對存儲在所述幼稚堆和成熟堆中的一個或多 個對象的參考;以及 其中所述至少一個衍生線程具有對所述多個私用幼稚區(qū)中的相關(guān)的一個的訪問,所述 至少一個衍生線程被配置成在所述相關(guān)的私用幼稚區(qū)內(nèi)分配和操控一個或多個對象。
2. 如權(quán)利要求1所述的裝置,進(jìn)一步包括網(wǎng)頁瀏覽器,其被配置成執(zhí)行所述web應(yīng)用, 其中所述web應(yīng)用以所述網(wǎng)頁瀏覽器支持的腳本語言編碼。
3.如權(quán)利要求2所述的裝置,其中所述腳本語言是JavaScript?。
4.如權(quán)利要求2所述的裝置,進(jìn)一步包括編程語言引擎,其被配置成在所述網(wǎng)頁瀏覽 器的運行時系統(tǒng)內(nèi)解釋和執(zhí)行所述web應(yīng)用代碼。
5.如權(quán)利要求4所述的裝置,進(jìn)一步包括確定性并行編程模塊,其被配置成修改所述 編程語言引擎,并采用在運行時被轉(zhuǎn)換為低層級硬件抽象層的確定性數(shù)據(jù)并行構(gòu)造擴(kuò)展編 程語言,以實現(xiàn)所述web應(yīng)用的數(shù)據(jù)并行性。
6. 如權(quán)利要求1所述的裝置,進(jìn)一步包括存儲器管理模塊,其被配置成監(jiān)測至少所述 第一線程和所述至少一個衍生線程的執(zhí)行,并管理被分配和存儲在所述存儲器的所述塊集 合內(nèi)的一個或多個對象的生命周期。
7.如權(quán)利要求6所述的裝置,其中所述存儲器管理模塊包括廢物收集器模塊,其被配 置成在廢物收集周期期間在至少所述多個私用幼稚區(qū)上執(zhí)行廢物收集。
8.如權(quán)利要求7所述的裝置,其中所述廢物收集器模塊被配置成至少部分地基于所述 至少一個衍生線程的執(zhí)行狀態(tài)發(fā)起所述廢物收集周期,所述執(zhí)行狀態(tài)確定所述至少一個衍 生線程是否到達(dá)安全點。
9.如權(quán)利要求8所述的裝置,其中所述執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成的 組中選擇的。
10.如權(quán)利要求9所述的裝置,其中當(dāng)所述執(zhí)行狀態(tài)是休眠或完成時,所述至少一個衍 生線程到達(dá)安全點,并且當(dāng)所述執(zhí)行狀態(tài)是正在運行時,所述至少一個衍生線程未能到達(dá) 安全點。
11. 如權(quán)利要求1所述的裝置,其中如果所述多個私用幼稚區(qū)中的所述相關(guān)的一個具 有不足以供所述至少一個衍生線程完成一個或多個對象的分配的存儲器空間,則所述至少 一個衍生線程被配置成請求對來自所述多個私用幼稚區(qū)的先前使用的私用幼稚區(qū)的訪問, 所述先前使用的私用幼稚區(qū)具有一部分存儲器空間可用于使所述至少一個衍生線程分配 一個或多個對象。
12. -種用于web應(yīng)用的并行計算的自動存儲器管理的系統(tǒng),所述系統(tǒng)包括: 媒體源;和 客戶端設(shè)備,被配置成在網(wǎng)絡(luò)上與所述媒體源進(jìn)行通信,并訪問和執(zhí)行由所述媒體源 提供的web應(yīng)用,所述客戶端設(shè)備具有計算系統(tǒng),其被配置成允許所述web應(yīng)用的并行計 算,所述計算系統(tǒng)包括: 處理器,具有至少兩個計算機(jī)處理單元(CPU)核; 操作系統(tǒng),被配置成給所述處理器的相應(yīng)CPU核指派所述web應(yīng)用的處理功能的一個 或多個線程,以在所述相應(yīng)CPU核上并發(fā)執(zhí)行,所述一個或多個線程包括第一線程和至少 一個衍生線程; 存儲器,其具有塊集合,該塊集合被分發(fā)給所述第一線程和所述至少一個衍生線程,所 述存儲器被劃分為幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫; 其中所述第一線程具有對所述幼稚堆和成熟堆的訪問,所述第一線程被配置成在所述 幼稚堆中分配和操控一個或多個對象,并寫入對存儲在所述幼稚堆和成熟堆中的一個或多 個對象的參考;以及 其中所述至少一個衍生線程具有對所述多個私用幼稚區(qū)中的相關(guān)的一個的訪問,所述 至少一個衍生線程被配置成在所述相關(guān)的私用幼稚區(qū)內(nèi)分配和操控一個或多個對象。
13. 如權(quán)利要求12所述的系統(tǒng),進(jìn)一步包括網(wǎng)頁瀏覽器,其被配置成執(zhí)行所述web應(yīng) 用,其中所述web應(yīng)用以所述網(wǎng)頁瀏覽器支持的腳本語言編碼。
14. 如權(quán)利要求13所述的系統(tǒng),進(jìn)一步包括: 編程語言引擎,被配置成在所述網(wǎng)頁瀏覽器的運行時系統(tǒng)內(nèi)解釋和執(zhí)行所述web應(yīng)用 代碼;和 確定性并行編程模塊,被配置成修改所述編程語言引擎,并采用在運行時被轉(zhuǎn)換為低 層級硬件抽象層的確定性數(shù)據(jù)并行構(gòu)造擴(kuò)展編程語言,以便實現(xiàn)所述web應(yīng)用的數(shù)據(jù)并行 性。
15. 如權(quán)利要求12所述的系統(tǒng),進(jìn)一步包括: 存儲器管理模塊,被配置成監(jiān)測至少所述第一線程和所述至少一個衍生線程的執(zhí)行, 并管理被分配和存儲在所述存儲器的所述塊集合內(nèi)的一個或多個對象的生命周期;和 廢物收集器模塊,被配置成在廢物收集周期期間在至少所述多個私用幼稚區(qū)上執(zhí)行廢 物收集。
16. 如權(quán)利要求15所述的系統(tǒng),其中所述廢物收集器模塊被配置成至少部分地基于所 述至少一個衍生線程的執(zhí)行狀態(tài)發(fā)起所述廢物收集周期,所述執(zhí)行狀態(tài)確定所述至少一個 衍生線程是否到達(dá)安全點,其中所述執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成的組中選 擇的。
17. 如權(quán)利要求12所述的系統(tǒng),其中,如果所述多個私用幼稚區(qū)中的所述相關(guān)的一個 具有不足以供所述至少一個衍生線程完成一個或多個對象的分配的存儲器空間,則所述至 少一個衍生線程被配置成請求對來自所述多個私用幼稚區(qū)的先前使用的私用幼稚區(qū)的訪 問,所述先前使用的私用幼稚區(qū)具有一部分存儲器空間可用于使所述至少一個衍生線程分 配一個或多個對象。
18. -種用于web應(yīng)用的并行計算的自動存儲器管理的方法,所述方法包括: 在處理器的相應(yīng)CPU核上發(fā)起web應(yīng)用的處理功能的一個或多個線程的并發(fā)執(zhí)行,所 述一個或多個線程包括第一線程和至少一個衍生線程; 在被分發(fā)給所述第一線程和所述至少一個衍生線程的共享存儲器中獲取相關(guān)的塊,所 述塊包括幼稚堆、成熟堆和具有多個私用幼稚區(qū)的數(shù)據(jù)庫,其中所述第一線程具有對所述 幼稚堆和成熟堆的訪問并被配置成在所述幼稚堆和成熟堆內(nèi)分配和操控一個或多個對象, 并且所述至少一個衍生線程具有對所述多個私用幼稚區(qū)中相關(guān)的一個的訪問并被配置成 在所述多個私用幼稚區(qū)中相關(guān)的一個內(nèi)分配和操控一個或多個對象;以及 監(jiān)測至少所述第一線程和所述至少一個衍生線程的執(zhí)行,以及管理被分配和存儲在所 述幼稚堆、成熟堆和所述存儲器的所述多個幼稚區(qū)中的每一個內(nèi)的一個或多個對象的生命 周期。
19. 如權(quán)利要求18所述的方法,進(jìn)一步包括: 在廢物收集周期的發(fā)起期間在至少所述多個私用幼稚區(qū)上執(zhí)行廢物收集。
20. 如權(quán)利要求19所述的方法,其中所述廢物收集周期至少部分地基于所述至少一個 衍生線程的執(zhí)行狀態(tài),所述執(zhí)行狀態(tài)確定所述至少一個衍生線程是否到達(dá)安全點,其中所 述執(zhí)行狀態(tài)是從由正在運行、休眠和完成構(gòu)成的組中選擇的。
21. 如權(quán)利要求18所述的方法,進(jìn)一步包括: 確定所述多個私用幼稚區(qū)中所述相關(guān)的一個具有不足以供所述至少一個衍生線程完 成一個或多個對象的分配的存儲器空間; 識別來自所述多個私用幼稚區(qū)的先前使用的私用幼稚區(qū),其具有一部分存儲器空間可 用于使所述至少一個衍生線程分配一個或多個對象;以及 訪問所述先前使用的私用幼稚區(qū),并且在所述部分可用的存儲器空間內(nèi)分配一個或多 個對象。
22. 至少一種存儲指令的計算機(jī)可訪問介質(zhì),所述指令當(dāng)由機(jī)器執(zhí)行時使機(jī)器執(zhí)行根 據(jù)權(quán)利要求18-21中任一項所述的方法的操作。
【文檔編號】G06F9/38GK104412240SQ201380017284
【公開日】2015年3月11日 申請日期:2013年7月24日 優(yōu)先權(quán)日:2012年7月27日
【發(fā)明者】R·L·哈森, S·A·赫胡特 申請人:英特爾公司