亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種代碼執(zhí)行方法及裝置與流程

文檔序號(hào):12063345閱讀:242來(lái)源:國(guó)知局
一種代碼執(zhí)行方法及裝置與流程

本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種代碼執(zhí)行方法及裝置。



背景技術(shù):

計(jì)算機(jī)技術(shù)的發(fā)展日新月異,計(jì)算機(jī)技術(shù)已廣泛應(yīng)用于各個(gè)領(lǐng)域。計(jì)算機(jī)技術(shù)的基礎(chǔ)之一就是代碼的執(zhí)行,通過(guò)執(zhí)行代碼以達(dá)到預(yù)期的目標(biāo)和效果。

代碼的執(zhí)行可以分為單線程異步執(zhí)行和多線程執(zhí)行,或者說(shuō)可以分為阻塞操作和非阻塞操作兩種操作模式。阻塞操作是某個(gè)進(jìn)程/某段程序等待在那里,可以是等待某個(gè)信號(hào)、某個(gè)文件準(zhǔn)備好,某個(gè)網(wǎng)絡(luò)包數(shù)據(jù)接收完成等等,之后才可以繼續(xù)運(yùn)行。非阻塞操作就是指當(dāng)線程執(zhí)行這些方法時(shí),如果操作還沒(méi)有就緒,就立即返回,而不會(huì)一直等到操作就緒。

現(xiàn)有技術(shù)不能兼顧兩種操作模式的優(yōu)點(diǎn),執(zhí)行效率有待提高。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明解決的技術(shù)問(wèn)題是如何提升代碼的執(zhí)行效率。

為解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供一種代碼執(zhí)行方法,包括:

轉(zhuǎn)換源代碼為中間代碼,所述中間代碼用于解釋執(zhí)行或編譯執(zhí)行,所述編譯執(zhí)行不支持阻塞操作;

解釋執(zhí)行所述中間代碼;

在所述解釋執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換為編譯執(zhí)行所述中間代碼。

可選的,所述的代碼執(zhí)行方法還包括:在編譯執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足解釋執(zhí)行的觸發(fā)條件,則切換為解釋執(zhí)行所述中間代碼。

可選的,所述編譯執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)調(diào)用頻度高于頻度閾值的代碼段。

可選的,所述解釋執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)阻塞操作。

可選的,所述代碼執(zhí)行方法適于在瀏覽器中執(zhí)行;所述解釋執(zhí)行所述中間代碼包括:利用瀏覽器可直接運(yùn)行的腳本語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼;所述編譯執(zhí)行所述中間代碼包括:編譯所述中間語(yǔ)言為瀏覽器可直接運(yùn)行的腳本語(yǔ)言。

可選的,所述瀏覽器可直接運(yùn)行的腳本語(yǔ)言包括:JavaScript語(yǔ)言,所述編譯執(zhí)行所述中間代碼還包括,在編譯所述中間語(yǔ)言為JavaScript語(yǔ)言后,由JavaScript引擎執(zhí)行。

可選的,所述中間代碼為虛擬機(jī)器指令代碼。

本發(fā)明實(shí)施例還提供一種代碼執(zhí)行裝置,包括:代碼轉(zhuǎn)換單元、解釋執(zhí)行單元、第一切換單元、編譯執(zhí)行單元;其中:

所述代碼轉(zhuǎn)換單元,適于轉(zhuǎn)換源代碼為中間代碼,所述中間代碼用于解釋執(zhí)行或編譯執(zhí)行;所述編譯執(zhí)行不支持阻塞操作;

所述解釋執(zhí)行單元,適于解釋執(zhí)行所述中間代碼;

所述第一切換單元,適于在所述解釋執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換至所述編譯執(zhí)行單元,以編譯執(zhí)行所述中間代碼。

可選的,所述代碼執(zhí)行裝置還包括:第二切換單元,適于在編譯執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足解釋執(zhí)行的觸發(fā)條件,則切換至所述解釋執(zhí)行單元,以解釋執(zhí)行所述中間代碼。

可選的,所述編譯執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)調(diào)用頻度高于頻度閾值的代碼段。

可選的,所述解釋執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)阻塞操作。

可選的,所述代碼執(zhí)行裝置適于瀏覽器;所述解釋執(zhí)行單元,適于利用瀏覽器可直接運(yùn)行的腳本語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼;所述編譯執(zhí)行單元,適于編譯所述中間語(yǔ)言為瀏覽器可直接運(yùn)行的腳本語(yǔ)言。

可選的,所述瀏覽器可直接運(yùn)行的腳本語(yǔ)言包括:JavaScript語(yǔ)言;所述 編譯執(zhí)行單元,還適于在編譯所述中間語(yǔ)言為JavaScript語(yǔ)言后,由JavaScript引擎執(zhí)行。

可選的,所述中間代碼為虛擬機(jī)器指令代碼。

可選的,所述代碼執(zhí)行裝置適于瀏覽器。

與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例的技術(shù)方案具有以下有益效果:

通過(guò)轉(zhuǎn)換源代碼為同時(shí)支持解釋執(zhí)行和編譯執(zhí)行的中間代碼,解釋執(zhí)行該中間代碼,并在解釋執(zhí)行中間代碼時(shí),動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換為編譯執(zhí)行所述中間代碼,從而可以在對(duì)代碼特性進(jìn)行動(dòng)態(tài)評(píng)估的基礎(chǔ)上,選擇更加合適高效的執(zhí)行方式進(jìn)行代碼執(zhí)行,提升代碼執(zhí)行的效率。

附圖說(shuō)明

圖1是本發(fā)明實(shí)施例中一種代碼執(zhí)行方法的流程圖;

圖2是本發(fā)明實(shí)施例中一種代碼執(zhí)行裝置的結(jié)構(gòu)示意圖。

具體實(shí)施方式

如前所述,代碼的執(zhí)行可以分為單線程異步執(zhí)行和多線程執(zhí)行,或者是阻塞操作和非阻塞操作兩種模式。阻塞操作是某個(gè)進(jìn)程/某段程序等待在那里,可以是等待某個(gè)信號(hào)、某個(gè)文件準(zhǔn)備好,某個(gè)網(wǎng)絡(luò)包數(shù)據(jù)接收完成等等,之后才可以繼續(xù)運(yùn)行。非阻塞操作就是指當(dāng)線程執(zhí)行這些方法時(shí),如果操作還沒(méi)有就緒,就立即返回,而不會(huì)一直等到操作就緒。阻塞操作和非阻塞操作各有優(yōu)缺,而現(xiàn)有的多種語(yǔ)言只支持其中一種模式,執(zhí)行效率有待提高。

本發(fā)明實(shí)施例通過(guò)轉(zhuǎn)換源代碼為同時(shí)支持解釋執(zhí)行和編譯執(zhí)行的中間代碼,解釋執(zhí)行該中間代碼,并在解釋執(zhí)行中間代碼時(shí),動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換為編譯執(zhí)行所述中間代碼,從而可以在對(duì)代碼特性進(jìn)行動(dòng)態(tài)評(píng)估的基礎(chǔ)上,選擇更加合適高效的執(zhí)行方式進(jìn)行代碼執(zhí)行,提升代碼執(zhí)行的效率。

為使本發(fā)明的上述目的、特征和有益效果能夠更為明顯易懂,下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施例做詳細(xì)的說(shuō)明。

圖1是本發(fā)明實(shí)施例中一種代碼執(zhí)行方法的流程圖。

S11,轉(zhuǎn)換源代碼為中間代碼,所述中間代碼用于解釋執(zhí)行或編譯執(zhí)行,所述編譯執(zhí)行不支持阻塞操作。

源代碼可以是多種編程語(yǔ)言編寫的代碼,例如C、C++、Objective-C等語(yǔ)言編寫的代碼,可以是支持阻塞操作的代碼。

中間代碼可以同時(shí)支持解釋執(zhí)行和編譯執(zhí)行兩種執(zhí)行方式,可以是虛擬機(jī)器指令的代碼。

解釋執(zhí)行可以是通過(guò)一個(gè)解釋器來(lái)執(zhí)行中間語(yǔ)言指令,此模式雖然在運(yùn)行效率上低于編譯執(zhí)行,但是其代碼體積較小,啟動(dòng)較快,并且能夠支持阻塞執(zhí)行操作,進(jìn)而支持協(xié)作式多線程。此模式適用于調(diào)用頻次較低的代碼,如初始化代碼、低頻調(diào)用的邏輯代碼。

解釋器的編寫語(yǔ)言由該代碼執(zhí)行的具體應(yīng)用環(huán)境決定,與具體的應(yīng)用環(huán)境相適應(yīng)。

S12,解釋執(zhí)行所述中間代碼。

如前所述,解釋執(zhí)行是指通過(guò)一個(gè)解釋器來(lái)執(zhí)行中間語(yǔ)言指令,能夠支持阻塞執(zhí)行操作,進(jìn)而支持協(xié)作式多線程。解釋器的編寫語(yǔ)言由該代碼執(zhí)行的具體應(yīng)用環(huán)境決定,與具體的應(yīng)用環(huán)境相適應(yīng)。

S13,在所述解釋執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換為編譯執(zhí)行所述中間代碼。

動(dòng)態(tài)評(píng)估代碼特性可以以預(yù)先設(shè)定的時(shí)間間隔進(jìn)行;編譯執(zhí)行的觸發(fā)條件根據(jù)編制執(zhí)行的特點(diǎn)設(shè)定。

編譯執(zhí)行可以是將中間語(yǔ)言轉(zhuǎn)換目標(biāo)代碼后,交由目標(biāo)代碼適用的具體引擎來(lái)執(zhí)行。編譯執(zhí)行可以通過(guò)JIT編譯器將中間語(yǔ)言編譯為目標(biāo)代碼。目標(biāo)代碼由執(zhí)行方法的具體應(yīng)用環(huán)境決定,適于具體的應(yīng)用環(huán)境直接執(zhí)行。

由于編譯執(zhí)行模式實(shí)現(xiàn)將源代碼編譯為適于應(yīng)用環(huán)境的目標(biāo)代碼,故在運(yùn)行效率上大大高于解釋執(zhí)行,但是其生成的代碼體積較大,啟動(dòng)較慢,并且無(wú)法執(zhí)行含有阻塞操作的代碼。

此模式適用于調(diào)用頻次較高的代碼,如高頻核心循環(huán)、計(jì)算量較大的算法等。故,在解釋執(zhí)行時(shí),對(duì)中間代碼特性的評(píng)估,對(duì)編譯執(zhí)行的觸發(fā)條件的設(shè)定結(jié)合調(diào)用頻次進(jìn)行。

在具體實(shí)施中,所述編譯執(zhí)行的觸發(fā)條件可以是所述中間代碼出現(xiàn)調(diào)用頻度高于頻度閾值的代碼段。代碼段的調(diào)用可以是函數(shù)調(diào)用,解釋器可以對(duì)各個(gè)函數(shù)的調(diào)用頻度進(jìn)行統(tǒng)計(jì)。當(dāng)調(diào)用頻度高于頻度閾值時(shí),判斷為滿足編譯執(zhí)行的觸發(fā)條件。

在具體實(shí)施中,代碼執(zhí)行方法還可以包括步驟S14。

S14,在編譯執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足解釋執(zhí)行的觸發(fā)條件,則切換為解釋執(zhí)行所述中間代碼。

動(dòng)態(tài)評(píng)估代碼特性可以以預(yù)先設(shè)定的時(shí)間間隔進(jìn)行;編譯執(zhí)行的觸發(fā)條件根據(jù)編譯執(zhí)行的特點(diǎn)設(shè)定。

如前所述,解釋執(zhí)行可以是通過(guò)一個(gè)解釋器來(lái)執(zhí)行中間語(yǔ)言指令,此模式雖然在運(yùn)行效率上低于編譯執(zhí)行,但是其代碼體積較小,啟動(dòng)較快,并且能夠支持阻塞執(zhí)行模式,進(jìn)而支持協(xié)作式多線程。此模式適用于調(diào)用頻次較低的代碼,如初始化代碼、低頻調(diào)用的邏輯代碼。

解釋執(zhí)行的觸發(fā)條件可以基于解釋執(zhí)行的特性設(shè)定。例如,可以將解釋執(zhí)行的觸發(fā)條件設(shè)定為:所述中間代碼出現(xiàn)阻塞操作。

由編譯執(zhí)行切換為解釋執(zhí)行的過(guò)程需要實(shí)現(xiàn)堆棧切換(On-Stack Replacement,OSR),即:在編譯執(zhí)行過(guò)程中用到的函數(shù)尚未返回的狀態(tài)下(函數(shù)狀態(tài)仍存在于堆棧中),將其“熱”切換到解釋模式。

在具體實(shí)施中,所述代碼執(zhí)行方法適于在瀏覽器中執(zhí)行。所述解釋執(zhí)行所述中間代碼包括:利用瀏覽器可直接運(yùn)行的腳本語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼;所述編譯執(zhí)行所述中間代碼包括:編譯所述中間語(yǔ)言為瀏覽器可直接運(yùn)行的腳本語(yǔ)言。

在本發(fā)明一實(shí)施例中,所述解釋執(zhí)行所述中間代碼包括:利用JavaScript語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼。所述編譯執(zhí)行所述中間代碼包括: 編譯所述中間語(yǔ)言為JavaScript語(yǔ)言后,由JavaScript引擎執(zhí)行。

JavaScript語(yǔ)言是一種腳本語(yǔ)言,是互聯(lián)網(wǎng)瀏覽器標(biāo)準(zhǔn)所支持的唯一編程語(yǔ)言,因此,現(xiàn)有的大量以其他編程語(yǔ)言(比如C、C++、Objective-C等)寫成的代碼無(wú)法直接在瀏覽器中運(yùn)行。

在現(xiàn)有技術(shù)種可以通過(guò)將C/C++代碼編譯成JavaScript以達(dá)到在瀏覽器中運(yùn)行的目的,比如asm.js。但是此技術(shù)受限于JavaScript的單線程異步執(zhí)行模型,無(wú)法支持套用同步阻塞編程模型的C/C++代碼,這使得其應(yīng)用范圍受到極大限制。另一方面,其編譯產(chǎn)生的JavaScript過(guò)于龐大,不僅加載速度慢,而且容易導(dǎo)致瀏覽器崩潰。

本發(fā)明實(shí)施例將非JavaScript代碼轉(zhuǎn)換成一種中間語(yǔ)言。此中間語(yǔ)言的特點(diǎn)是能夠以兩種不同的模式執(zhí)行:解釋執(zhí)行和編譯執(zhí)行。

當(dāng)執(zhí)行發(fā)生阻塞時(shí),在返回到主消息循環(huán)去處理其他消息(或者返回到線程調(diào)度器以切換至其他線程)之前,需要妥善保存當(dāng)前的執(zhí)行現(xiàn)場(chǎng)和調(diào)用堆棧,只有這樣,才能夠在線程被喚醒時(shí),有效的恢復(fù)執(zhí)行現(xiàn)場(chǎng)和調(diào)用堆棧。在解釋執(zhí)行模式中,線程的運(yùn)行狀態(tài)和調(diào)用堆棧是在解釋器里模擬出來(lái)的,因此能夠進(jìn)行保存和恢復(fù);而編譯成JavaScript之后,運(yùn)行狀態(tài)和調(diào)用堆棧由瀏覽器的JavaScript引擎管理,應(yīng)用層無(wú)法介入,因此無(wú)法實(shí)現(xiàn)阻塞。

故本發(fā)明實(shí)施例通過(guò)將源代碼轉(zhuǎn)化為同時(shí)支持解釋執(zhí)行和編譯執(zhí)行的中間代碼,解釋執(zhí)行該中間代碼,并在解釋執(zhí)行中間代碼時(shí),動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換為編譯執(zhí)行所述中間代碼,從而可以在對(duì)代碼特性進(jìn)行動(dòng)態(tài)評(píng)估的基礎(chǔ)上,選擇更加合適高效的執(zhí)行方式進(jìn)行代碼執(zhí)行,提升代碼執(zhí)行的效率。

參照?qǐng)D2,本發(fā)明實(shí)施例還提供一種代碼執(zhí)行裝置,包括:代碼轉(zhuǎn)換單元21、解釋執(zhí)行單元22、第一切換單元23、編譯執(zhí)行單元24;其中:

所述代碼轉(zhuǎn)換單元21,適于轉(zhuǎn)換源代碼為中間代碼,所述中間代碼用于解釋執(zhí)行或編譯執(zhí)行;所述編譯執(zhí)行不支持阻塞操作;

所述解釋執(zhí)行單元,適于解釋執(zhí)行所述中間代碼;

所述第一切換單元23,適于在所述解釋執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足編譯執(zhí)行的觸發(fā)條件,則切換至所述編譯執(zhí)行單元24,以編譯執(zhí)行所述中間代碼。

在具體實(shí)施中,所述代碼執(zhí)行裝置還可以包括:第二切換單元25,適于在編譯執(zhí)行所述中間代碼時(shí)動(dòng)態(tài)評(píng)估代碼特性,若評(píng)估結(jié)果滿足解釋執(zhí)行的觸發(fā)條件,則切換至所述解釋執(zhí)行單元22,以解釋執(zhí)行所述中間代碼。

在具體實(shí)施中,所述編譯執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)調(diào)用頻度高于頻度閾值的代碼段。

在具體實(shí)施中,所述解釋執(zhí)行的觸發(fā)條件包括:所述中間代碼出現(xiàn)阻塞操作。

在具體實(shí)施中,所述代碼執(zhí)行裝置適于瀏覽器;所述解釋執(zhí)行單元22,適于利用瀏覽器可直接運(yùn)行的腳本語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼;所述編譯執(zhí)行單元24,適于編譯所述中間語(yǔ)言為瀏覽器可直接運(yùn)行的腳本語(yǔ)言。

在具體實(shí)施中,所述解釋執(zhí)行單元22,適于利用JavaScript語(yǔ)言編寫的解釋器解釋執(zhí)行所述中間代碼;所述編譯執(zhí)行單元24,適于編譯所述中間語(yǔ)言為JavaScript語(yǔ)言后,由JavaScript引擎執(zhí)行。

在具體實(shí)施中,所述中間代碼為虛擬機(jī)器指令代碼。

本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。

雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動(dòng)與修改,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1