本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及信息生成方法和裝置。
背景技術(shù):
隨著企業(yè)業(yè)務(wù)的快速發(fā)展,用于生成與企業(yè)業(yè)務(wù)相關(guān)的信息的系統(tǒng)也越來(lái)越復(fù)雜。通常情況下,該系統(tǒng)會(huì)包括多個(gè)服務(wù)器,各個(gè)服務(wù)器用于存儲(chǔ)不同的計(jì)算部分的數(shù)據(jù)和函數(shù),這些服務(wù)器之間主要采用消息機(jī)制或者遠(yuǎn)程方法調(diào)用等手段來(lái)進(jìn)行交互,以實(shí)現(xiàn)對(duì)各個(gè)服務(wù)器存儲(chǔ)的數(shù)據(jù)和函數(shù)進(jìn)行計(jì)算,生成信息。
然而,采用消息機(jī)制或者遠(yuǎn)程方法調(diào)用機(jī)制對(duì)存儲(chǔ)在服務(wù)器上的數(shù)據(jù)和函數(shù)直接進(jìn)行計(jì)算的過(guò)程中會(huì)使數(shù)據(jù)和函數(shù)產(chǎn)生多個(gè)版本,這樣就會(huì)出現(xiàn)版本沖突的問(wèn)題,導(dǎo)致生成信息的成功率較低。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)的目的在于提出一種改進(jìn)的信息生成方法和裝置,來(lái)解決以上背景技術(shù)部分提到的技術(shù)問(wèn)題。
第一方面,本申請(qǐng)實(shí)施例提供了一種信息生成方法,該方法包括:接收信息生成指令,其中,信息生成指令包括用于生成信息的至少一個(gè)組件的組件信息,至少一個(gè)組件中的每個(gè)組件是存儲(chǔ)該組件的服務(wù)器通過(guò)對(duì)與該組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的;創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程,其中,至少一個(gè)子進(jìn)程用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程用于控制至少一個(gè)子進(jìn)程;基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
在一些實(shí)施例中,至少一個(gè)子進(jìn)程的數(shù)量與至少一個(gè)組件的數(shù)量相同;以及基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件,包括:通過(guò)主進(jìn)程將至少一個(gè)組件的組件信息中的每個(gè)組件信息與至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程一一配對(duì),并將每個(gè)組件信息發(fā)送至配對(duì)的子進(jìn)程;對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,基于與該子進(jìn)程配對(duì)的組件信息,通過(guò)該子進(jìn)程加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該方法還包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,通過(guò)該子進(jìn)程獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài),其中,組件的狀態(tài)包括以下任意一項(xiàng):加載中、加載完成、加載失敗、執(zhí)行中、執(zhí)行成功、執(zhí)行失敗。
在一些實(shí)施例中,該方法還包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是加載失敗,則通過(guò)該子進(jìn)程重新加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該方法還包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行失敗,則通過(guò)該子進(jìn)程重新執(zhí)行與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該方法還包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行完成,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,該方法還包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,若該子進(jìn)程被創(chuàng)建時(shí)間與當(dāng)前時(shí)間之間的時(shí)間段大于預(yù)設(shè)時(shí)間段,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,該方法還包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,響應(yīng)于接收到用于指示該子進(jìn)程退出的指令,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,主進(jìn)程與至少一個(gè)子進(jìn)程之間通過(guò)以下任意一種方式進(jìn)行交互:共享內(nèi)存、管道、套接字。
第二方面,本申請(qǐng)實(shí)施例提供了一種信息生成裝置,該裝置包括:接收單元,配置用于接收信息生成指令,其中,信息生成指令包括用于生成信息的至少一個(gè)組件的組件信息,至少一個(gè)組件中的每個(gè)組件是存儲(chǔ)該組件的服務(wù)器通過(guò)對(duì)與該組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的;創(chuàng)建單元,配置用于創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程,其中,至少一個(gè)子進(jìn)程用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程用于控制至少一個(gè)子進(jìn)程;加載單元,配置用于基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;執(zhí)行單元,配置用于通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
在一些實(shí)施例中,至少一個(gè)子進(jìn)程的數(shù)量與至少一個(gè)組件的數(shù)量相同;以及加載單元,包括:配對(duì)子單元,配置用于通過(guò)主進(jìn)程將至少一個(gè)組件的組件信息中的每個(gè)組件信息與至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程一一配對(duì),并將每個(gè)組件信息發(fā)送至配對(duì)的子進(jìn)程;加載子單元,配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,基于與該子進(jìn)程配對(duì)的組件信息,通過(guò)該子進(jìn)程加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該裝置還包括:獲取單元,配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,通過(guò)該子進(jìn)程獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài),其中,組件的狀態(tài)包括以下任意一項(xiàng):加載中、加載完成、加載失敗、執(zhí)行中、執(zhí)行成功、執(zhí)行失敗。
在一些實(shí)施例中,該裝置還包括:重新加載單元,配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是加載失敗,則通過(guò)該子進(jìn)程重新加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該裝置還包括:重新執(zhí)行單元,配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行失敗,則通過(guò)該子進(jìn)程重新執(zhí)行與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在一些實(shí)施例中,該裝置還包括:第一退出單元,配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行完成,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,該裝置還包括:第二退出單元,配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,若該子進(jìn)程被創(chuàng)建時(shí)間與當(dāng)前時(shí)間之間的時(shí)間段大于預(yù)設(shè)時(shí)間段,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,該裝置還包括:第三退出單元,配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,響應(yīng)于接收到用于指示該子進(jìn)程退出的指令,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在一些實(shí)施例中,主進(jìn)程與至少一個(gè)子進(jìn)程之間通過(guò)以下任意一種方式進(jìn)行交互:共享內(nèi)存、管道、套接字。
第三方面,本申請(qǐng)實(shí)施例提供了一種電子設(shè)備,該電子設(shè)備包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,用于存儲(chǔ)一個(gè)或多個(gè)程序;當(dāng)一個(gè)或多個(gè)程序被一個(gè)或多個(gè)處理器執(zhí)行,使得一個(gè)或多個(gè)處理器實(shí)現(xiàn)如第一方面中任一實(shí)現(xiàn)方式描述的方法。
第四方面,本申請(qǐng)實(shí)施例提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如第一方面中任一實(shí)現(xiàn)方式描述的方法。
本申請(qǐng)實(shí)施例提供的信息生成方法和裝置,在接收到信息生成指令之后,首先創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程;然后基于信息生成指令中的至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;最后通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。通過(guò)將數(shù)據(jù)和函數(shù)封裝成組件,并通過(guò)主進(jìn)程控制子進(jìn)程來(lái)加載和執(zhí)行組件,以生成信息。避免了版本沖突問(wèn)題的出現(xiàn),從而提高了生成信息的成功率。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1是本申請(qǐng)實(shí)施例可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;
圖2是根據(jù)本申請(qǐng)的信息生成方法的一個(gè)實(shí)施例的流程圖;
圖3是根據(jù)本申請(qǐng)的信息生成方法的又一個(gè)實(shí)施例的流程圖;
圖4是根據(jù)本申請(qǐng)的信息生成裝置的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;
圖5是適于用來(lái)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的電子設(shè)備的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本申請(qǐng)作進(jìn)一步的詳細(xì)說(shuō)明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋相關(guān)發(fā)明,而非對(duì)該發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與有關(guān)發(fā)明相關(guān)的部分。
需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)。
圖1示出了可以應(yīng)用本申請(qǐng)的信息生成方法或信息生成裝置的實(shí)施例的示例性系統(tǒng)架構(gòu)100。
如圖1所示,系統(tǒng)架構(gòu)100可以包括服務(wù)器101、102、103,信息生成服務(wù)器104,終端設(shè)備105和網(wǎng)絡(luò)106、107。網(wǎng)絡(luò)106用以在服務(wù)器101、102、103和信息生成服務(wù)器104之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)107用以在終端設(shè)備105和信息生成服務(wù)器104之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)106、107可以包括各種連接類型,例如有線、無(wú)線通信鏈路或者光纖電纜等等。
用戶可以使用終端設(shè)備105通過(guò)網(wǎng)絡(luò)107與信息生成服務(wù)器104交互,以接收或發(fā)送消息等。終端設(shè)備105可以是各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、膝上型便攜計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等等。
信息生成服務(wù)器104可以是提供各種服務(wù)的服務(wù)器,例如信息生成服務(wù)器在接收到終端設(shè)備105發(fā)送的信息生成指令之后,可以首先創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程;之后通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;然后通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息;最后對(duì)生成的信息進(jìn)行存儲(chǔ)或反饋給終端設(shè)備105。
服務(wù)器101、102、103可以是分別存儲(chǔ)不同組件的服務(wù)器。其中,服務(wù)器101、102、103可以通過(guò)對(duì)與組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝以生成組件。
需要說(shuō)明的是,本申請(qǐng)實(shí)施例所提供的信息生成方法一般由信息生成服務(wù)器104執(zhí)行,相應(yīng)地,信息生成裝置一般設(shè)置于信息生成服務(wù)器104中。信息生成服務(wù)器104可以是物理上存在的服務(wù)器,也可以是虛擬的服務(wù)器(即虛擬機(jī)),本實(shí)施對(duì)此不進(jìn)行具體的限定。
應(yīng)該理解,圖1中的服務(wù)器、信息生成服務(wù)器、終端設(shè)備和網(wǎng)絡(luò)的數(shù)目?jī)H僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的服務(wù)器、信息生成服務(wù)器、終端設(shè)備和網(wǎng)絡(luò)。
繼續(xù)參考圖2,其示出了根據(jù)本申請(qǐng)的信息生成方法的一個(gè)實(shí)施例的流程200。信息生成方法,包括以下步驟:
步驟201,接收信息生成指令。
在本實(shí)施例中,信息生成方法運(yùn)行于其上的電子設(shè)備(例如圖1所示的信息生成服務(wù)器104)可以通過(guò)有線連接方式或者無(wú)線連接方式從客戶端(例如圖1所示的終端設(shè)備105)獲取信息生成指令。其中,信息生成指令可以包括用于生成信息的至少一個(gè)組件的組件信息。組件信息可以包括組件的入口類和入口方法等信息。
在本實(shí)施例中,用于生成信息的各個(gè)組件可以被存儲(chǔ)在不同的服務(wù)器(例如圖1所示的服務(wù)器101、102、103)中,是存儲(chǔ)組件的服務(wù)器通過(guò)對(duì)與組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的。這里,封裝,即隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口,控制在程序中屬性的讀和修改的訪問(wèn)級(jí)別;將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”。其中,數(shù)據(jù)和函數(shù)都是類的成員。
步驟202,創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程。
在本實(shí)施例中,在接收到信息生成指令之后,電子設(shè)備可以創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程。其中,至少一個(gè)子進(jìn)程可以用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程可以用于控制至少一個(gè)子進(jìn)程。
在本實(shí)施例中,電子設(shè)備可以通過(guò)多種方式創(chuàng)建主進(jìn)程和至少一個(gè)子進(jìn)程。作為示例,電子設(shè)備可以通過(guò)fock函數(shù)創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程。其中,fork函數(shù)可以通過(guò)系統(tǒng)調(diào)用創(chuàng)建一個(gè)與原來(lái)進(jìn)程幾乎完全相同的進(jìn)程。一個(gè)進(jìn)程調(diào)用fork函數(shù)后,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲(chǔ)數(shù)據(jù)和代碼的空間;然后把原來(lái)的進(jìn)程的所有值都復(fù)制到新的新進(jìn)程中,只有少數(shù)值與原來(lái)的進(jìn)程的值不同。
步驟203,基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件。
在本實(shí)施例中,基于信息生成指令中的至少一個(gè)組件的組件信息,電子設(shè)備可以通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件。這里,加載就是把存儲(chǔ)組件的服務(wù)器中的組件調(diào)到電子設(shè)備的內(nèi)存中。通常情況下,子進(jìn)程可以通過(guò)java(一門面向?qū)ο缶幊陶Z(yǔ)言)反射機(jī)制來(lái)完成組件的加載。
java反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為java語(yǔ)言的反射機(jī)制。java反射機(jī)制主要提供了以下功能:在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法;生成動(dòng)態(tài)代理。
在本實(shí)施例中,主進(jìn)程可以首先基于用于生成信息的組件的數(shù)量,確定出子進(jìn)程的啟動(dòng)數(shù)量;然后控制一定數(shù)量的子進(jìn)程啟動(dòng),并將用于生成信息的組件的組件信息發(fā)送至已啟動(dòng)的子進(jìn)程。已啟動(dòng)的子進(jìn)程可以首先根據(jù)用于生成信息的組件的組件信息,查找到存儲(chǔ)用于生成信息的組件的各個(gè)服務(wù)器;然后從存儲(chǔ)用于生成信息的組件的各個(gè)服務(wù)器中加載用于生成信息的組件。
在本實(shí)施例中,主進(jìn)程可以通過(guò)多種方式啟動(dòng)子進(jìn)程。作為示例,主進(jìn)程可以通過(guò)runtime(即runtime類,封裝了運(yùn)行時(shí)的環(huán)境。每個(gè)java應(yīng)用程序都有一個(gè)runtime類實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接)中的exec函數(shù)或者processbuilder(j2se(java2標(biāo)準(zhǔn)版)1.5在java.lang中新添加的一個(gè)新類,此類用于創(chuàng)建操作系統(tǒng)進(jìn)程,提供一種啟動(dòng)和管理進(jìn)程的方法)中的start函數(shù)啟動(dòng)子進(jìn)程,并在子進(jìn)程啟動(dòng)過(guò)程中,將用于生成信息的組件的入口類和入口方法等信息傳遞至已啟動(dòng)的子進(jìn)程。
步驟204,通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
在本實(shí)施例中,電子設(shè)備可以通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息,并對(duì)信息進(jìn)行存儲(chǔ)或者發(fā)送至客戶端。作為示例,子進(jìn)程可以首先通過(guò)java反射機(jī)制來(lái)完成組件的執(zhí)行,以生成信息;然后將信息轉(zhuǎn)換成json(javascriptobjectnotation,是一種輕量級(jí)的數(shù)據(jù)交換格式)格式來(lái)進(jìn)行存儲(chǔ)。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,通過(guò)該子進(jìn)程獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài),其中,組件的狀態(tài)包括以下任意一項(xiàng):加載中、加載完成、加載失敗、執(zhí)行中、執(zhí)行成功、執(zhí)行失敗。這里,子進(jìn)程可以周期性地獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài),并根據(jù)不同的狀態(tài)觸發(fā)不同的后續(xù)處理方法。作為示例,若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是加載中或執(zhí)行中,則不進(jìn)行特殊處理,子進(jìn)程繼續(xù)周期性地獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)即可。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是加載失敗,則通過(guò)該子進(jìn)程重新加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。從而能夠及時(shí)發(fā)現(xiàn)加載失敗的組件,并對(duì)加載失敗的組件進(jìn)行重新加載,進(jìn)一步提高了生成信息的成功率。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行失敗,則通過(guò)該子進(jìn)程重新執(zhí)行與該子進(jìn)程配對(duì)的組件信息所指示的組件。從而能夠及時(shí)發(fā)現(xiàn)執(zhí)行失敗的組件,并對(duì)執(zhí)行失敗的組件進(jìn)行重新執(zhí)行,進(jìn)一步提高了生成信息的成功率。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行完成,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。在組件執(zhí)行完成之后,能夠及時(shí)控制子進(jìn)程退出,從而實(shí)現(xiàn)了對(duì)電子設(shè)備的內(nèi)存的及時(shí)回收,避免了電子設(shè)備的內(nèi)存溢出情況的發(fā)生。
本實(shí)施例擁有完善的組件退出機(jī)制,除了通過(guò)周期性地獲取組件的狀態(tài),并在組件執(zhí)行完成之后控制子進(jìn)程退出之外,主進(jìn)程還可以通過(guò)多種其他的方式控制子進(jìn)程退出,以實(shí)現(xiàn)對(duì)電子設(shè)備的內(nèi)存的及時(shí)回收,避免電子設(shè)備的內(nèi)存溢出情況的發(fā)生。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,若該子進(jìn)程被創(chuàng)建時(shí)間與當(dāng)前時(shí)間之間的時(shí)間段大于預(yù)設(shè)時(shí)間段,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。作為示例,若預(yù)設(shè)時(shí)間段是2個(gè)小時(shí),子進(jìn)程被創(chuàng)建時(shí)間為2017/4/18:30:00,當(dāng)前時(shí)間為2017/4/111:00:00,則該子進(jìn)程被創(chuàng)建時(shí)間與當(dāng)前時(shí)間之間的時(shí)間段為2.5個(gè)小時(shí),其大于預(yù)設(shè)時(shí)間段,電子設(shè)備可以通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成方法還可以包括:對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,響應(yīng)于接收到用于指示該子進(jìn)程退出的指令,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。作為示例,用戶可以通過(guò)客戶端向電子設(shè)備發(fā)送用于指示子進(jìn)程退出的指令,電子設(shè)備接收到用于指示子進(jìn)程退出的指令之后,可以通過(guò)主進(jìn)程控制子進(jìn)程退出。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,主進(jìn)程與至少一個(gè)子進(jìn)程之間通過(guò)以下任意一種方式進(jìn)行交互:共享內(nèi)存、管道、套接字。其中,共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問(wèn)的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn),是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。其往往與其他通信機(jī)制配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步和通信。管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用。套接字(socket)是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同及其間的進(jìn)程通信。
本申請(qǐng)的實(shí)施例提供的信息生成方法,在接收到信息生成指令之后,首先創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程;然后基于信息生成指令中的至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;最后通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。通過(guò)將數(shù)據(jù)和函數(shù)封裝成組件,并通過(guò)主進(jìn)程控制子進(jìn)程來(lái)加載和執(zhí)行組件,以生成信息。避免了版本沖突問(wèn)題的出現(xiàn),從而提高了生成信息的成功率。
進(jìn)一步參考圖3,其示出了信息生成方法的又一個(gè)實(shí)施例的流程300。該信息生成方法的流程300,包括以下步驟:
步驟301,接收信息生成指令。
在本實(shí)施例中,信息生成方法運(yùn)行于其上的電子設(shè)備(例如圖1所示的信息生成服務(wù)器104)可以通過(guò)有線連接方式或者無(wú)線連接方式從客戶端(例如圖1所示的終端設(shè)備105)獲取信息生成指令。其中,信息生成指令可以包括用于生成信息的至少一個(gè)組件的組件信息。組件信息可以包括組件的入口類和入口方法等信息。用于生成信息的各個(gè)組件可以被存儲(chǔ)在不同的服務(wù)器(例如圖1所示的服務(wù)器101、102、103)中,是存儲(chǔ)組件的服務(wù)器通過(guò)對(duì)與組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的。
步驟302,創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程。
在本實(shí)施例中,在接收到信息生成指令之后,電子設(shè)備可以創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程。其中,至少一個(gè)子進(jìn)程可以用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程可以用于控制至少一個(gè)子進(jìn)程。這里,電子設(shè)備創(chuàng)建出的子進(jìn)程的數(shù)量可以與用于生成信息的組件的數(shù)量相同。
步驟303,通過(guò)主進(jìn)程將至少一個(gè)組件的組件信息中的每個(gè)組件信息與至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程一一配對(duì),并將每個(gè)組件信息發(fā)送至配對(duì)的子進(jìn)程。
在本實(shí)施例中,主進(jìn)程可以首先將用于生成信息的組件的組件信息與子進(jìn)程進(jìn)行一一配對(duì),然后將各個(gè)組件信息分別發(fā)送至與其配對(duì)的子進(jìn)程中,從而實(shí)現(xiàn)了將一個(gè)子進(jìn)程與一個(gè)組件信息對(duì)應(yīng)。
在本實(shí)施例中,主進(jìn)程可以首先啟動(dòng)全部子進(jìn)程;然后通過(guò)隨機(jī)分配的方式,為各個(gè)子進(jìn)程分別分配一個(gè)不同的組件信息。作為示例,若組件信息包括組件信息a、組件信息b、組件信息c,若子進(jìn)程包括子進(jìn)程1、子進(jìn)程2、子進(jìn)程3,則主進(jìn)程可以將組件信息a與子進(jìn)程1配對(duì)、組件信息b與子進(jìn)程2配對(duì)、組件信息c與子進(jìn)程3配對(duì),或者將組件信息c與子進(jìn)程1配對(duì)、組件信息b與子進(jìn)程2配對(duì)、組件信息a與子進(jìn)程3配對(duì)。
步驟304,對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,基于與該子進(jìn)程配對(duì)的組件信息,通過(guò)該子進(jìn)程加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在本實(shí)施例中,對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,該子進(jìn)程可以基于與該子進(jìn)程配對(duì)的組件信息,加載與該子進(jìn)程配對(duì)的組件信息所指示的組件,從而實(shí)現(xiàn)了一個(gè)子進(jìn)程加載一個(gè)組件。作為示例,若組件信息包括組件信息a、組件信息b、組件信息c,若子進(jìn)程包括子進(jìn)程1、子進(jìn)程2、子進(jìn)程3,組件信息a與子進(jìn)程1配對(duì)、組件信息b與子進(jìn)程2配對(duì)、組件信息c與子進(jìn)程3配對(duì),則子進(jìn)程1加載組件信息a所指示的組件,子進(jìn)程2加載組件信息b所指示的組件,子進(jìn)程3加載組件信息c所指示的組件。
步驟305,通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
在本實(shí)施例中,電子設(shè)備可以通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息,并對(duì)信息進(jìn)行存儲(chǔ)或者發(fā)送至客戶端。
從圖3中可以看出,與圖2對(duì)應(yīng)的實(shí)施例相比,本實(shí)施例中的信息生成方法的流程300突出了步驟303和步驟304。由此,本實(shí)施例描述的方案中一個(gè)子進(jìn)程加載和執(zhí)行一個(gè)組件,從而避免了類的隔離性的問(wèn)題的出現(xiàn),更進(jìn)一步地提高了生成信息的成功率。
進(jìn)一步參考圖4,作為對(duì)上述各圖所示方法的實(shí)現(xiàn),本申請(qǐng)?zhí)峁┝艘环N信息生成裝置的一個(gè)實(shí)施例,該裝置實(shí)施例與圖2所示的方法實(shí)施例相對(duì)應(yīng),該裝置具體可以應(yīng)用于各種電子設(shè)備中。
如圖4所示,本實(shí)施例所示的信息生成裝置400可以包括:接收單元401、創(chuàng)建單元402、加載單元403和執(zhí)行單元404。其中,接收單元401,配置用于接收信息生成指令,其中,信息生成指令包括用于生成信息的至少一個(gè)組件的組件信息,至少一個(gè)組件中的每個(gè)組件是存儲(chǔ)該組件的服務(wù)器通過(guò)對(duì)與該組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的;創(chuàng)建單元402,配置用于創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程,其中,至少一個(gè)子進(jìn)程用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程用于控制至少一個(gè)子進(jìn)程;加載單元403,配置用于基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;執(zhí)行單元404,配置用于通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
在本實(shí)施例中,信息生成裝置400中:接收單元401、創(chuàng)建單元402、加載單元403和執(zhí)行單元404的具體處理及其所帶來(lái)的技術(shù)效果可分別參考圖2對(duì)應(yīng)實(shí)施例中的步驟201、步驟202、步驟203和步驟204的相關(guān)說(shuō)明,在此不再贅述。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,至少一個(gè)子進(jìn)程的數(shù)量與至少一個(gè)組件的數(shù)量相同;以及加載單元403可以包括:配對(duì)子單元(圖中未示出),配置用于通過(guò)主進(jìn)程將至少一個(gè)組件的組件信息中的每個(gè)組件信息與至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程一一配對(duì),并將每個(gè)組件信息發(fā)送至配對(duì)的子進(jìn)程;加載子單元(圖中未示出),配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,基于與該子進(jìn)程配對(duì)的組件信息,通過(guò)該子進(jìn)程加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:獲取單元(圖中未示出),配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,通過(guò)該子進(jìn)程獲取與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài),其中,組件的狀態(tài)包括以下任意一項(xiàng):加載中、加載完成、加載失敗、執(zhí)行中、執(zhí)行成功、執(zhí)行失敗。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:重新加載單元(圖中未示出),配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是加載失敗,則通過(guò)該子進(jìn)程重新加載與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:重新執(zhí)行單元(圖中未示出),配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行失敗,則通過(guò)該子進(jìn)程重新執(zhí)行與該子進(jìn)程配對(duì)的組件信息所指示的組件。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:第一退出單元(圖中未示出),配置用于若與該子進(jìn)程配對(duì)的組件信息所指示的組件的狀態(tài)是執(zhí)行完成,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:第二退出單元(圖中未示出),配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,若該子進(jìn)程被創(chuàng)建時(shí)間與當(dāng)前時(shí)間之間的時(shí)間段大于預(yù)設(shè)時(shí)間段,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,信息生成裝置400還可以包括:第三退出單元(圖中未示出),配置用于對(duì)于至少一個(gè)子進(jìn)程中的每個(gè)子進(jìn)程,響應(yīng)于接收到用于指示該子進(jìn)程退出的指令,則通過(guò)主進(jìn)程控制該子進(jìn)程退出。
在本實(shí)施例的一些可選的實(shí)現(xiàn)方式中,主進(jìn)程與至少一個(gè)子進(jìn)程之間通過(guò)以下任意一種方式進(jìn)行交互:共享內(nèi)存、管道、套接字。
下面參考圖5,其示出了適于用來(lái)實(shí)現(xiàn)本申請(qǐng)實(shí)施例的電子設(shè)備的計(jì)算機(jī)系統(tǒng)500的結(jié)構(gòu)示意圖。圖5示出的電子設(shè)備僅僅是一個(gè)示例,不應(yīng)對(duì)本申請(qǐng)實(shí)施例的功能和使用范圍帶來(lái)任何限制。
如圖5所示,計(jì)算機(jī)系統(tǒng)500包括中央處理單元(cpu)501,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(rom)502中的程序或者從存儲(chǔ)部分508加載到隨機(jī)訪問(wèn)存儲(chǔ)器(ram)503中的程序而執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在ram503中,還存儲(chǔ)有系統(tǒng)500操作所需的各種程序和數(shù)據(jù)。cpu501、rom502以及ram503通過(guò)總線504彼此相連。輸入/輸出(i/o)接口505也連接至總線504。
以下部件連接至i/o接口505:包括鍵盤、鼠標(biāo)等的輸入部分506;包括諸如陰極射線管(crt)、液晶顯示器(lcd)等以及揚(yáng)聲器等的輸出部分507;包括硬盤等的存儲(chǔ)部分508;以及包括諸如lan卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分509。通信部分509經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動(dòng)器510也根據(jù)需要連接至i/o接口505。可拆卸介質(zhì)511,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲(chǔ)器等等,根據(jù)需要安裝在驅(qū)動(dòng)器510上,以便于從其上讀出的計(jì)算機(jī)程序根據(jù)需要被安裝入存儲(chǔ)部分508。
特別地,根據(jù)本公開(kāi)的實(shí)施例,上文參考流程圖描述的過(guò)程可以被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序。例如,本公開(kāi)的實(shí)施例包括一種計(jì)算機(jī)程序產(chǎn)品,其包括承載在計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序,該計(jì)算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實(shí)施例中,該計(jì)算機(jī)程序可以通過(guò)通信部分509從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)511被安裝。在該計(jì)算機(jī)程序被中央處理單元(cpu)501執(zhí)行時(shí),執(zhí)行本申請(qǐng)的方法中限定的上述功能。
需要說(shuō)明的是,本申請(qǐng)上述的計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)或者是上述兩者的任意組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子可以包括但不限于:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)訪問(wèn)存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦式可編程只讀存儲(chǔ)器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(cd-rom)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本申請(qǐng)中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。而在本申請(qǐng)中,計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括但不限于電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于:無(wú)線、電線、光纜、rf等等,或者上述的任意合適的組合。
附圖中的流程圖和框圖,圖示了按照本申請(qǐng)各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,該模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
描述于本申請(qǐng)實(shí)施例中所涉及到的單元可以通過(guò)軟件的方式實(shí)現(xiàn),也可以通過(guò)硬件的方式來(lái)實(shí)現(xiàn)。所描述的單元也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括接收單元、創(chuàng)建單元、加載單元和執(zhí)行單元。其中,這些單元的名稱在某種情況下并不構(gòu)成對(duì)該單元本身的限定,例如,接收單元還可以被描述為“接收信息生成指令的單元”。
作為另一方面,本申請(qǐng)還提供了一種計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以是上述實(shí)施例中描述的電子設(shè)備中所包含的;也可以是單獨(dú)存在,而未裝配入該電子設(shè)備中。上述計(jì)算機(jī)可讀介質(zhì)承載有一個(gè)或者多個(gè)程序,當(dāng)上述一個(gè)或者多個(gè)程序被該電子設(shè)備執(zhí)行時(shí),使得該電子設(shè)備:接收信息生成指令,其中,信息生成指令包括用于生成信息的至少一個(gè)組件的組件信息,至少一個(gè)組件中的每個(gè)組件是存儲(chǔ)該組件的服務(wù)器通過(guò)對(duì)與該組件相對(duì)應(yīng)的數(shù)據(jù)和函數(shù)進(jìn)行封裝而生成的;創(chuàng)建出主進(jìn)程和至少一個(gè)子進(jìn)程,其中,至少一個(gè)子進(jìn)程用于加載和執(zhí)行至少一個(gè)組件,主進(jìn)程用于控制至少一個(gè)子進(jìn)程;基于至少一個(gè)組件的組件信息,通過(guò)主進(jìn)程控制至少一個(gè)子進(jìn)程加載至少一個(gè)組件;通過(guò)至少一個(gè)子進(jìn)程執(zhí)行至少一個(gè)組件,生成信息。
以上描述僅為本申請(qǐng)的較佳實(shí)施例以及對(duì)所運(yùn)用技術(shù)原理的說(shuō)明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請(qǐng)中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時(shí)也應(yīng)涵蓋在不脫離上述發(fā)明構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進(jìn)行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請(qǐng)中公開(kāi)的(但不限于)具有類似功能的技術(shù)特征進(jìn)行互相替換而形成的技術(shù)方案。