欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

對動態(tài)類型化對象數(shù)據(jù)的并發(fā)訪問的制作方法

文檔序號:9732014閱讀:276來源:國知局
對動態(tài)類型化對象數(shù)據(jù)的并發(fā)訪問的制作方法
【專利說明】
[0001] 相關(guān)申請的交叉引用
[0002] 本專利申請?jiān)O(shè)及并要求于2013年8月30日由Filip Pizlo等人提交的名稱為 "RUNTIME ACCESS OF DYNAMIC OB巧CTS"的美國臨時專利申請61/872,386的權(quán)益,該專利 申請W引用方式全文并入本文。
技術(shù)領(lǐng)域
[0003] 本發(fā)明通常設(shè)及針對動態(tài)類型化數(shù)據(jù)的運(yùn)行時訪問。更具體地,本發(fā)明設(shè)及基于 動態(tài)語言的代碼的并發(fā)執(zhí)行中的動態(tài)類型化數(shù)據(jù)共享。
【背景技術(shù)】
[0004] 動態(tài)語言諸如化¥日5沈191:、1?油7、?71:11〇]1、?日1'1和?冊等正日益被認(rèn)為是靜態(tài)語言 諸如C和C++的替代。動態(tài)語言帶來很多益處,諸如程序員生產(chǎn)率和相對淺的學(xué)習(xí)曲線。然 而,進(jìn)一步采用包括化¥曰5。1'191:、1?山巧、?八11〇]1和其他語言的動態(tài)語言的障礙是缺少高性能 共享存儲器并發(fā)機(jī)制,諸如在靜態(tài)語言中明顯可用的線程和鎖定或libdispatch。由于對象 在動態(tài)語言中的工作方式,運(yùn)一問題被認(rèn)為是困難的,所W至今還未解決。
[0005] 先前為解決該問題所作的嘗試包括圍繞每個對象訪問添加鎖定機(jī)制。盡管鎖定機(jī) 制可保證期望的并發(fā)語義,但是非常慢。鎖定和解鎖可按照低于正常堆訪問的量級來執(zhí)行, 因此引入過高的開銷。
[0006] 另外,內(nèi)聯(lián)高速緩存(IC)通常用于基于化vaScript的代碼的高性能具體實(shí)施。典 型地,內(nèi)聯(lián)高速緩存包括自修改代碼。然而,可在多個處理器上執(zhí)行的并發(fā)自修改代碼可能 既困難又慢。因此,向用于基于化vaScript的代碼的基于內(nèi)聯(lián)高速緩存的具體實(shí)施添加并 發(fā)性可能造成不切實(shí)際的昂貴。
[0007] 此外,JavaScript作為語言允許在已構(gòu)造對象之后向那些對象添加元素。如果基 于化vaScript的程序被執(zhí)行W向?qū)ο筇砑颖瓤杀话谄鋬?nèi)聯(lián)屬性存儲裝置中的更多的 屬性,則必須分配單獨(dú)的外聯(lián)存儲器塊W存儲其附加屬性。JavaScript陣列主要用于編索 引的屬性存儲。關(guān)于對象的編索引屬性的存在總是要求分配外聯(lián)索引屬性存儲對象。
[000引因此,用于執(zhí)行基于動態(tài)語言的程序的現(xiàn)有具體實(shí)施往往缺乏效率、并發(fā)性和有 效優(yōu)化。

【發(fā)明內(nèi)容】

[0009] 從動態(tài)編程語言諸如化vaScript生成的代碼可包括增強(qiáng)型對象模型W允許在運(yùn) 行時期間并發(fā)執(zhí)行數(shù)據(jù)訪問。除了對象的類型結(jié)構(gòu)和數(shù)據(jù)有效載荷存儲屬性或字段值之 夕h索引結(jié)構(gòu)可被引入到表示動態(tài)類型化對象的對象模型。索引結(jié)構(gòu)的元素可作為用于訪 問對象的間接索引指向?qū)?yīng)屬性值處。
[0010] 在一個實(shí)施例中,動態(tài)類型化程序代碼(例如,實(shí)現(xiàn)某一算法)可被允許通過對象 的索引結(jié)構(gòu)經(jīng)由附加間接索引來對對象的單個屬性值并發(fā)執(zhí)行每次訪問操作而不會產(chǎn)生 競爭狀況。針對對象的單個屬性值的每次訪問(例如,加載/存儲)操作可要求多個指令操作 和/或原子操作。在并發(fā)執(zhí)行期間,運(yùn)些指令可被允許W非同步方式交織。
[0011] 在其他實(shí)施例中,用于訪問單個線程中的動態(tài)類型化對象的內(nèi)聯(lián)高速緩存初始化 可被卸載到解譯器而不會造成不必要的同步開銷??商峁┚€程偏置機(jī)制來檢測代碼塊是否 在單個線程中執(zhí)行。此外,可減少經(jīng)由編譯器諸如基線JIT編譯器執(zhí)行的內(nèi)聯(lián)高速緩存初始 化的次數(shù),W提高處理性能。
[0012] 代碼塊可為編譯單元、一部分源代碼、一個或多個源代碼文件或其他可適用代碼 語句集(例如,代碼規(guī)范的連續(xù)部分)。編譯單元可指代被編譯為并且被認(rèn)為是一個邏輯單 元的源代碼。編譯單元可包括一個或多個完整的源代碼文件,但是還可為專用代碼部分或 文件的所選擇的部分。編譯單元內(nèi)的聲明和定義可確定函數(shù)和數(shù)據(jù)對象的范圍。
[0013] 在其他實(shí)施例中,由多個線程中共享的代碼塊中的內(nèi)聯(lián)高速緩存初始化可被延遲 或定時W減少所要求的處理器同步(例如,光點(diǎn))的出現(xiàn),W利用初始化來更新可執(zhí)行代碼。 例如,每個線程可在運(yùn)行時期間將初始化代碼存儲在緩沖器中。光點(diǎn)定時器(例如,經(jīng)由特 定線程)可使得所有內(nèi)聯(lián)高速緩存周期性地(例如,每IOms)初始化(例如,更新到運(yùn)行時), 只要緩沖器對于所要求的處理器同步來說非空即可。因此,可減少針對內(nèi)聯(lián)高速緩存初始 化所需的昂貴或緩慢的同步操作的調(diào)用次數(shù)。
[0014] 在其他實(shí)施例中,針對基于動態(tài)語言的程序可動態(tài)跟蹤陣列對象是否為平面陣列 類型。平面陣列類型的陣列對象的陣列元素可被存儲在所分配的對象單元內(nèi)的可選內(nèi)聯(lián)存 儲裝置中,W表示陣列對象。對象單元中的內(nèi)聯(lián)存儲裝置可被可用存儲空間限定在于存儲 器中分配的相鄰對象單元之間。對象的平面陣列類型可基于對象是否表示陣列并且基于對 象單元的內(nèi)聯(lián)存儲裝置是否具有足夠的存儲空間來存儲陣列的元素。平面陣列類型的陣列 對象可允許在對象單元中訪問的陣列對象的陣列元素,而無需經(jīng)由被存儲在對象單元中的 指針進(jìn)行附加存儲器加載。此外,生成支持平面陣列類型的可執(zhí)行代碼的編譯器的類型系 統(tǒng)可允許編譯器基于平面陣列類型來執(zhí)行代碼優(yōu)化。
[0015] 通過附圖并且通過W下具體描述,本發(fā)明的其他特征將顯而易見。
【附圖說明】
[0016] 本發(fā)明W舉例的方式進(jìn)行說明,并且不限于各個附圖的圖形,在附圖中類似的附 圖標(biāo)號指示類似的元件,并且其中:
[0017] 圖1為示出了用于從網(wǎng)絡(luò)化設(shè)備檢索的基于動態(tài)語言的源代碼的示例性執(zhí)行運(yùn)行 時的網(wǎng)絡(luò)圖;
[0018] 圖2為示出了并發(fā)執(zhí)行和/或優(yōu)化執(zhí)行訪問動態(tài)類型化對象的系統(tǒng)的一個實(shí)施例 的框圖;
[0019] 圖3為示出了用于執(zhí)行共享共同動態(tài)類型化對象的多個線程的一個示例性運(yùn)行時 的框圖;
[0020] 圖4示出了經(jīng)由并發(fā)執(zhí)行而共享的動態(tài)類型化對象的示例性分配;
[0021] 圖5為示出了用于生成用于訪問動態(tài)類型化對象的并發(fā)可執(zhí)行指令的過程的一個 實(shí)施例的流程圖;
[0022] 圖6為示出了用于基于具有索引標(biāo)號的對象模型來并發(fā)訪問對象的屬性值的過程 的一個實(shí)施例的流程圖.
[0023] 圖7A-圖7B為示出了針對并發(fā)執(zhí)行來優(yōu)化內(nèi)聯(lián)高速緩存的代碼塊的運(yùn)行時系統(tǒng)的 框圖;
[0024] 圖8示出了用于利用內(nèi)聯(lián)高速緩存代碼來動態(tài)編譯代碼塊的并發(fā)執(zhí)行的示例性時 間線;
[0025] 圖9為示出了用于自修改內(nèi)聯(lián)代碼訪問用于并發(fā)執(zhí)行的動態(tài)類型化對象的過程的 一個實(shí)施例的流程圖;
[0026] 圖10為示出了用于基于具有索引標(biāo)號的對象模型借助內(nèi)聯(lián)高速緩存并發(fā)訪問對 象的屬性值來動態(tài)編譯函數(shù)代碼塊的過程的一個實(shí)施例的流程圖;
[0027] 圖11示出了針對平面陣列對象支持陣列數(shù)據(jù)存儲內(nèi)聯(lián)的對象模型的實(shí)例;
[0028] 圖12為示出了用于優(yōu)化動態(tài)編程語言中指定的對象數(shù)據(jù)訪問的動態(tài)分配的陣列 數(shù)據(jù)內(nèi)聯(lián)的系統(tǒng)的一個實(shí)施例的框圖;
[0029] 圖13為示出了動態(tài)編譯代碼W分配陣列數(shù)據(jù)內(nèi)聯(lián)的過程的一個實(shí)施例的流程圖;
[0030] 圖14為示出了用于在運(yùn)行時期間識別平面陣列數(shù)據(jù)類型W生成指令W用于經(jīng)由 平面陣列分配的內(nèi)聯(lián)迭代地訪問對象的過程的一個實(shí)施例的流程圖;
[0031] 圖15示出了數(shù)據(jù)處理系統(tǒng)諸如計(jì)算機(jī)系統(tǒng)的一個實(shí)例,該數(shù)據(jù)處理系統(tǒng)可與本文 所述的實(shí)施例一起使用。
【具體實(shí)施方式】
[0032] 本文描述了用于并發(fā)共享動態(tài)類型化對象的方法和裝置。在W下說明中示出了許 多具體細(xì)節(jié),W提供對本發(fā)明的實(shí)施例的徹底解釋。然而,對于本領(lǐng)域的技術(shù)人員顯而易見 的是,本發(fā)明的實(shí)施例可在不具有運(yùn)些具體細(xì)節(jié)的情況下被實(shí)施。在其他情況下,尚未詳細(xì) 示出熟知的部件、結(jié)構(gòu)和技術(shù),W免模糊對此說明的理解。
[0033] 在本說明書中提到的。一個實(shí)施例"("one embodiment"或"an embodiment")是指 結(jié)合實(shí)施例所述的特定特征、結(jié)構(gòu)或特性可被包括在本發(fā)明的至少一個實(shí)施例中。在本說 明書中的不同位置出現(xiàn)的短語"在一個實(shí)施例中"不一定都是指同一個實(shí)施例。
[0034] 下圖中示出的過程通過處理邏輯部件來執(zhí)行,該處理邏輯部件包括硬件(例如,電 路、專用邏輯部件等)、軟件(諸如在通用計(jì)算機(jī)系統(tǒng)或?qū)S脵C(jī)上運(yùn)行的軟件)、或兩者的組 合。雖然下文按照某些順序操作來描述該過程,但應(yīng)當(dāng)理解,所述的某些操作可W不同的順 序來執(zhí)行。此外,某些操作也可并行執(zhí)行而并非按順序執(zhí)行。
[0035] 圖1為示出了用于從網(wǎng)絡(luò)化設(shè)備檢索的基于動態(tài)語言的源代碼的示例性執(zhí)行運(yùn)行 時的網(wǎng)絡(luò)圖。在一個實(shí)施例中,網(wǎng)絡(luò)系統(tǒng)100可包括一個或多個服務(wù)器應(yīng)用諸如在一個或多 個服務(wù)器設(shè)備中托管的服務(wù)器應(yīng)用101,W提供可用于在客戶端設(shè)備中運(yùn)行的客戶端應(yīng)用 105的內(nèi)容。例如,服務(wù)器應(yīng)用101可為web服務(wù)器并且客戶端應(yīng)用105可為web瀏覽器。服務(wù) 器101和客戶端105可基于例如互聯(lián)網(wǎng)絡(luò)協(xié)議諸如HTTP(超文本傳輸協(xié)議)或其他可適用協(xié) 議經(jīng)由網(wǎng)絡(luò)103彼此通信。
[0036] 在一個實(shí)施例中,從服務(wù)器101檢索的內(nèi)容可包括基于超文本語言(諸如HTML(超 文本標(biāo)記語言)、XML(可擴(kuò)展標(biāo)記語言)或其他標(biāo)記語言)的web頁面,該超文本語言嵌入動 態(tài)編程語言(例如化巾曰5(31'191:、1?油7、?八11〇]1或其他動態(tài)類型化語言)中或與動態(tài)編程語言 中的源進(jìn)行鏈接(例如超鏈接)。客戶端105可動態(tài)地下載或獲取用于執(zhí)行的所鏈接的源。在 一個實(shí)施例中,客戶端105可動態(tài)編譯下載的源W優(yōu)化代碼執(zhí)行W用于改善包括例如多線 程執(zhí)行和/或多個處理器或處理單元的并發(fā)執(zhí)行環(huán)境中的性能。
[0037] 圖2為示出了并發(fā)執(zhí)行和/或優(yōu)化執(zhí)行訪問動態(tài)類型化對象的系統(tǒng)的一個實(shí)施例 的框圖。在一個實(shí)施例中,系統(tǒng)200可包括操作環(huán)境201諸如由一個或多個處理器托管的圖1 的操作系統(tǒng)托管客戶端應(yīng)用105。操作環(huán)境201可包括編譯器205,該編譯器例如基于即時編 譯來在運(yùn)行時期間將源代碼203動態(tài)和/或連續(xù)編譯為可執(zhí)行代碼215。
[0038] 源代碼203可包括動態(tài)編程語言諸如化vaSc;ript、Ruby、Python或其他可適用動態(tài) 類型化語言中的程序。源代碼203可不指定或聲明在代碼聲明中標(biāo)引的數(shù)據(jù)或?qū)ο蟮念愋?或形狀。在一個實(shí)施例中,可通過在操作環(huán)境201中運(yùn)行的瀏覽器應(yīng)用或其他可適用應(yīng)用來 從遠(yuǎn)程設(shè)備諸如圖1的服務(wù)器101檢索源代碼203。編譯模塊205可由瀏覽器應(yīng)用控制W執(zhí)行 瀏覽操作。
[0039] 編譯器205可從源代碼203生成可執(zhí)行代碼215。在一個實(shí)施例中,編譯器205可解 析源代碼203來W靜態(tài)或動態(tài)方式發(fā)出中間代碼、字節(jié)碼或其他可適用編譯代碼,從而執(zhí)行 在源代碼203中指定的數(shù)據(jù)處理操作。編譯器205可提供表示動態(tài)類型化對象的對象模型W 啟用并發(fā)執(zhí)行。例如,對象模型可包括對對象值的間接引用,W允許在多個處理器環(huán)境中在 多線程間或多個執(zhí)行過程間共享共同對象。
[0040] 在一個實(shí)施例中,優(yōu)化的內(nèi)聯(lián)高速緩存代碼生成器模塊207可發(fā)出內(nèi)聯(lián)高速緩存 代碼W用于訪問(例如,讀取、寫入、更新等)由多執(zhí)行線程共享的動態(tài)類型化對象。所發(fā)出 的內(nèi)聯(lián)高速緩存代碼可支持針對并發(fā)執(zhí)行的優(yōu)化運(yùn)行時綁定而無需高代價的處理器指令 同步。所發(fā)出的代碼可包括能夠在例如執(zhí)行初始化內(nèi)聯(lián)高速緩存代碼時改變其自身的指令 的自修改代碼。
[0041] 在一個實(shí)施例中,并發(fā)代碼執(zhí)行模塊217可調(diào)用解譯器213W基于經(jīng)由編譯器205 生成的代碼來執(zhí)行操作。例如,解譯器213可根據(jù)經(jīng)由編譯器205發(fā)送的自修改指令來更新 字節(jié)碼,而無需激活指令高速緩存刷新來同步不同處理器間的指令。在一些實(shí)施例中,指令 高速緩存刷新模塊219可例如經(jīng)由專用線程來周期性地調(diào)用指令高速緩存刷新。
[0042] 根據(jù)某些實(shí)施例,編譯器215可包括優(yōu)化的陣列對象處理程序模塊209, W提供能 夠在運(yùn)行時期間識別專用類型(例如,平面陣列類型)的動態(tài)類型化數(shù)據(jù)的可執(zhí)行代碼,從 而優(yōu)化陣列數(shù)據(jù)處理。因此,經(jīng)由并發(fā)代碼執(zhí)行模塊217對陣列對象的重復(fù)或迭代處理可獲 取與用于利用靜態(tài)類型化陣列數(shù)據(jù)類型編譯的類似操作的執(zhí)行指令可比擬的執(zhí)行性能(例 如,利用預(yù)先指定的陣列類型來優(yōu)化陣列數(shù)據(jù)處理)。
[0043] 并發(fā)代碼執(zhí)行模塊217可基于可執(zhí)行代碼215來調(diào)用ACS(原子比較和交換)處理程 序模塊221W執(zhí)行同步更新操作而無需依賴高成本的基于軟件的鎖定/解鎖機(jī)制。ACS處理 程序模塊221可直接經(jīng)由處理器硬件邏輯部件支持W確保原子更新操作在無間斷的情況下 執(zhí)行(例如,在一個處理器指令周期內(nèi))。
[0044] 在一個實(shí)施例中,程序或可執(zhí)行代碼中的變量的運(yùn)行時值的類型可在程序(例如, 可執(zhí)行代碼217)正運(yùn)行的同時在運(yùn)行時期間被識別并進(jìn)行概要分析(例如,分析、概要等)。 基于通過過去執(zhí)行歷史的所識別的類型,可預(yù)測運(yùn)行時值的未來類型來更新或重新編譯程 序W代替程序或具有類型預(yù)測優(yōu)勢的代碼的部分。
[0045]例如,配置文件數(shù)據(jù)(例如,在運(yùn)行時期間指示數(shù)據(jù)或?qū)ο蟮念愋停┛杀皇占竭\(yùn) 行時數(shù)據(jù)211中。編譯器205可基于配置文件數(shù)據(jù)經(jīng)由重新編譯來連續(xù)優(yōu)化可執(zhí)行代碼215。 配置文件代碼可嵌入可執(zhí)行代碼215中W在運(yùn)行時期間啟用對配置文件數(shù)據(jù)的收集。
[OOW 動態(tài)類型化對象的并發(fā)訪問
[0047] 在一個實(shí)施例中,可提供并發(fā)對象模型W允許并發(fā)執(zhí)行在不損壞存儲器堆的情況 下訪問(例如,讀取、寫入、更新等)動態(tài)類型化對象所需的多個機(jī)器指令。對象可包括一個 或多個字段或?qū)傩?。動態(tài)類型化對象的字段或?qū)傩钥稍诘谝淮谓?jīng)由可執(zhí)行代碼分配時在運(yùn) 行時期間出現(xiàn)。與可執(zhí)行代碼對應(yīng)的基于動態(tài)語言的源程序或代碼可能不包括對象的所有 字段的預(yù)先聲明。對象可被表示為復(fù)雜數(shù)據(jù)結(jié)構(gòu)(或形狀)。對對象的每次訪問可包括執(zhí)行 多個機(jī)器指令。
[0048] 并發(fā)對象模型可包括屬性索引,W允許在無需經(jīng)由額外同步的協(xié)調(diào)的情況下經(jīng)由 從多執(zhí)行(例如,在多處理器環(huán)境中)線程(或處理)交織的多個機(jī)器指令來并發(fā)訪問公共對 象或競爭存儲器訪問。對對象的訪問的結(jié)果可保持一致,而與交織運(yùn)些指令的次序無關(guān)。因 此,并發(fā)對象模型可經(jīng)由多個指令來啟用原子訪問,每個指令具有原子執(zhí)行的單個機(jī)器指 令屬性。因此,并發(fā)對象模型可在不損壞堆的情況下允許競爭存儲器進(jìn)行訪問,W并發(fā)讀 取、寫入和更新一致且良好限定(例如,根據(jù)運(yùn)些訪問操作的語義)的動態(tài)類型化對象。
[0049] 根據(jù)某些實(shí)施例,對象可經(jīng)由單元和有效載荷來表示。單元可包含對結(jié)構(gòu)和有效 載荷的標(biāo)引。例如,單元可包括識別結(jié)構(gòu)的結(jié)構(gòu)標(biāo)識符和指向存儲有效載荷的位置的有效 載荷指針。結(jié)構(gòu)可指示對象具有的字段或?qū)傩訵及在有效載荷中存在的那些字段索引。在 一些實(shí)施例中,結(jié)構(gòu)可包括表示字段的一組屬性名。有效載荷可包括那些字段的值(或?qū)傩?值)。
[0050] 基于并發(fā)對象模型來表示動態(tài)類型化對象的單元的示例性分配可包括: StnwtCdI
[0051] { int structure; Value **index;
[0化2]
[0053] 其中Cell. Value可表示用于對象的整數(shù)或其他可適用屬性值或字段值。 Cell. S化UC化re可為對對象的結(jié)構(gòu)的整數(shù)標(biāo)引。共享Cell. S化UC化re的公共值的兩個對象 可指示運(yùn)兩個對象為相同動態(tài)類型或形狀。在一個實(shí)施例中,Cell .structure可表示對表 示不同類型的動態(tài)結(jié)構(gòu)的表格的索引。
[0054] Cell, index可包括對對象的有效載荷或?qū)傩灾档拈g接標(biāo)引。在一個實(shí)施例中, Cell. index可提供一層間接索引W允許對象的有效載荷針對對象數(shù)據(jù)的并發(fā)訪問動態(tài)生 長(例如,屬性值)而不會引起具有不一致數(shù)據(jù)訪問結(jié)果的競爭狀況。索引本身可包括經(jīng)由 字段偏移量索引的陣列并且在其中包含指向真實(shí)字段值(或?qū)傩灾?的指針。
[0055] 在一個實(shí)施例中,Cell. index可包含作為對象數(shù)據(jù)訪問中的不變量的不變字段標(biāo) 引或值。盡管對象的字段值可改變,但是表示對象的對象單元可包括對字段值的不變標(biāo)引。 可在無需同步成本的情況下實(shí)現(xiàn)并發(fā)對象訪問。
[0056] 例如,可利用具有內(nèi)聯(lián)高速緩存優(yōu)化的W下操作(例如,由編譯器生成)來執(zhí)行用 于訪問對象的典型對象讀取程序聲明(例如,用于讀取對象O的屬性f的V = O . f): if (o->s
當(dāng)前第1頁1 2 3 4 5 6 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
青田县| 巴中市| 正阳县| 西吉县| 土默特左旗| 长岛县| 湖南省| 银川市| 林州市| 丰原市| 忻城县| 台安县| 五华县| 蒲江县| 余庆县| 肃北| 商丘市| 仁化县| 赤水市| 达日县| 大同市| 榆树市| 临泉县| 万荣县| 昭苏县| 盈江县| 梅州市| 托克托县| 青铜峡市| 浮梁县| 河曲县| 金门县| 云南省| 天镇县| 鹤壁市| 建德市| 高邑县| 克什克腾旗| 松滋市| 定西市| 颍上县|