本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種任務(wù)執(zhí)行方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)待執(zhí)行的目標(biāo)任務(wù)可能同時(shí)包括多個(gè)相互之間存在依賴關(guān)系的子任務(wù),此時(shí),如何執(zhí)行該目標(biāo)任務(wù)成為計(jì)算機(jī)編程人員需考慮的問題。
相關(guān)技術(shù)中,預(yù)先在計(jì)算機(jī)中創(chuàng)建多個(gè)用于執(zhí)行任務(wù)的線程,當(dāng)需執(zhí)行目標(biāo)任務(wù)時(shí),從該多個(gè)線程中預(yù)先為該目標(biāo)任務(wù)確定一個(gè)線程,并通過確定的線程執(zhí)行該目標(biāo)任務(wù),也即,通過確定的線程執(zhí)行該目標(biāo)任務(wù)包括的多個(gè)子任務(wù)。
在上述通過確定的線程執(zhí)行該目標(biāo)任務(wù)時(shí),由于該目標(biāo)任務(wù)包括的多個(gè)子任務(wù)均由該確定的線程執(zhí)行,導(dǎo)致執(zhí)行該目標(biāo)任務(wù)時(shí)所需的時(shí)間較長(zhǎng),影響計(jì)算機(jī)執(zhí)行該目標(biāo)任務(wù)的效率。
技術(shù)實(shí)現(xiàn)要素:
為了解決相關(guān)技術(shù)通過確定線程執(zhí)行目標(biāo)任務(wù)時(shí)所需時(shí)間較長(zhǎng)的問題,本發(fā)明實(shí)施例提供了一種任務(wù)執(zhí)行方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。所述技術(shù)方案如下:
第一方面,提供了一種任務(wù)執(zhí)行方法,所述方法包括:
對(duì)于待執(zhí)行的目標(biāo)任務(wù)中的每個(gè)子任務(wù),當(dāng)確定所述子任務(wù)執(zhí)行結(jié)束時(shí),將所述子任務(wù)作為父任務(wù),并生成所述父任務(wù)的子任務(wù);
其中,每個(gè)子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符,所述標(biāo)識(shí)符用于指示對(duì)應(yīng)的子任務(wù)是否為并發(fā)任務(wù);
當(dāng)基于所述父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定所述父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將所述父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由所述并發(fā)線程中的線程執(zhí)行所述父任務(wù)的子任務(wù),所述并發(fā)線程池包括至少兩個(gè)線程,所述并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù)。
可選地,所述生成所述父任務(wù)的子任務(wù)之后,還包括:
當(dāng)基于所述父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定所述父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將所述父任務(wù)的子任務(wù)添加至串行線程中,由所述串行線程執(zhí)行所述父任務(wù)的子任務(wù),所述串行線程用于按照順序執(zhí)行任務(wù)。
可選地,所述方法還包括:
分解所述目標(biāo)任務(wù),得到所述目標(biāo)任務(wù)包括的所有子任務(wù);
確定所述目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序;
根據(jù)所述目標(biāo)任務(wù)中每個(gè)子任務(wù)的執(zhí)行順序,確定所述目標(biāo)任務(wù)的任務(wù)樹,所述任務(wù)樹中根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為最先執(zhí)行的子任務(wù);
確定所述目標(biāo)任務(wù)的任務(wù)樹中的根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù),并將所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。
可選地,所述方法還包括:
當(dāng)執(zhí)行所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),將所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至所述并發(fā)線程池中,由所述并發(fā)線程池中的線程執(zhí)行所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
第二方面,提供了一種任務(wù)執(zhí)行裝置,所述裝置包括:
生成模塊,用于對(duì)于待執(zhí)行的目標(biāo)任務(wù)中的每個(gè)子任務(wù),當(dāng)確定所述子任務(wù)執(zhí)行結(jié)束時(shí),將所述子任務(wù)作為父任務(wù),并生成所述父任務(wù)的子任務(wù);
其中,每個(gè)子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符,所述標(biāo)識(shí)符用于指示對(duì)應(yīng)的子任務(wù)是否為并發(fā)任務(wù);
第一添加模塊,用于當(dāng)基于所述父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定所述父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將所述父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由所述并發(fā)線程中的線程執(zhí)行所述父任務(wù)的子任務(wù),所述并發(fā)線程池包括至少兩個(gè)線程,所述并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù)。
可選地,所述裝置還包括:
第二添加模塊,用于當(dāng)基于所述父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定所述父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將所述父任務(wù)的子任務(wù)添加至串行線程中,由所述串行線程執(zhí)行所述父任務(wù)的子任務(wù),所述串行線程用于按照順序執(zhí)行任務(wù)。
可選地,所述裝置還包括:
分解模塊,用于分解所述目標(biāo)任務(wù),得到所述目標(biāo)任務(wù)包括的所有子任務(wù);
第一確定模塊,用于確定所述目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序;
第二確定模塊,用于根據(jù)所述目標(biāo)任務(wù)中每個(gè)子任務(wù)的執(zhí)行順序,確定所述目標(biāo)任務(wù)的任務(wù)樹,所述任務(wù)樹中根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為最先執(zhí)行的子任務(wù);
第三確定模塊,用于確定所述目標(biāo)任務(wù)的任務(wù)樹中的根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù),并將所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。
可選地,所述裝置還包括:
第三添加模塊,用于當(dāng)執(zhí)行所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),將所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至所述并發(fā)線程池中,由所述并發(fā)線程池中的線程執(zhí)行所述根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
第三方面,提供一種任務(wù)執(zhí)行裝置,所述任務(wù)執(zhí)行裝置包括處理器、通信接口、存儲(chǔ)器和通信總線;
所述處理器,所述通信接口和所述存儲(chǔ)器通過所述通信總線完成相互間的通信;
所述存儲(chǔ)器用于存放計(jì)算機(jī)程序;
所述處理器用于執(zhí)行存儲(chǔ)器上所存放的程序,以實(shí)現(xiàn)上述第一方面所述的任務(wù)執(zhí)行方法。
第四方面,提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)內(nèi)存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述第一方面所述的任務(wù)執(zhí)行方法。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是:
在本發(fā)明實(shí)施例中,當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程中的線程執(zhí)行所述父任務(wù)的子任務(wù)。由于并發(fā)線程池包括至少兩個(gè)線程,且并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù),也即,在本發(fā)明實(shí)施例中,存在至少兩個(gè)線程來執(zhí)行目標(biāo)任務(wù)中的子任務(wù),避免由單一的線程來執(zhí)行目標(biāo)任務(wù)的包括的所有子任務(wù),從而可以縮短計(jì)算機(jī)執(zhí)行目標(biāo)任務(wù)所需的時(shí)間,提高了計(jì)算機(jī)執(zhí)行目標(biāo)任務(wù)的效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例提供的一種目標(biāo)任務(wù)示意圖;
圖2是本發(fā)明實(shí)施例提供的一種任務(wù)執(zhí)行方法流程圖;
圖3a是本發(fā)明實(shí)施例提供的另一種任務(wù)執(zhí)行方法流程圖;
圖3b是本發(fā)明實(shí)施例提供的一種任務(wù)樹示意圖;
圖3c是本發(fā)明實(shí)施例提供的一種線程示意圖;
圖4a是本發(fā)明實(shí)施例提供的一種任務(wù)執(zhí)行裝置框圖;
圖4b是本發(fā)明實(shí)施例提供的另一種任務(wù)執(zhí)行裝置框圖;
圖5是本發(fā)明實(shí)施例提供的另一種任務(wù)執(zhí)行裝置框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
為了后續(xù)便于說明,在對(duì)本發(fā)明實(shí)施例提供的任務(wù)執(zhí)行方法進(jìn)行詳細(xì)說明之前,先對(duì)本發(fā)明實(shí)施例涉及的名詞進(jìn)行介紹。
任務(wù):是指計(jì)算機(jī)完成的一個(gè)活動(dòng),也即計(jì)算機(jī)通過一系列操作達(dá)到某一目的。例如,計(jì)算機(jī)在執(zhí)行“讀取數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存中”的操作時(shí),該“讀取數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存中”即為一個(gè)任務(wù)。
線程:當(dāng)計(jì)算機(jī)執(zhí)行一個(gè)程序時(shí),系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程,并為該進(jìn)程分配資源,比如內(nèi)存空間以及磁盤空間等。而線程則是進(jìn)程在執(zhí)行運(yùn)算時(shí)的最小單位,也即,當(dāng)進(jìn)程包括多個(gè)子任務(wù)時(shí),實(shí)際上是由進(jìn)程中包括的線程來執(zhí)行該各個(gè)子任務(wù)。
并發(fā)任務(wù):對(duì)于一個(gè)定時(shí)任務(wù),當(dāng)該定時(shí)任務(wù)的執(zhí)行時(shí)間到達(dá)時(shí),立即執(zhí)行該定時(shí)任務(wù),無論當(dāng)前是否有其他任務(wù)正在執(zhí)行,此時(shí),該定時(shí)任務(wù)稱為并發(fā)任務(wù)。
串行任務(wù):對(duì)于一個(gè)定時(shí)任務(wù),當(dāng)該定時(shí)任務(wù)的執(zhí)行時(shí)間到達(dá)時(shí),需等待當(dāng)前正在執(zhí)行的任務(wù)執(zhí)行完畢時(shí),才能執(zhí)行該定時(shí)任務(wù),此時(shí)該定時(shí)任務(wù)稱為串行任務(wù)。
并發(fā)線程:用于執(zhí)行并發(fā)任務(wù)的線程。
串行線程:用于執(zhí)行串行任務(wù)的線程。
接下來,對(duì)本發(fā)明實(shí)施例的應(yīng)用場(chǎng)景進(jìn)行介紹,隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)待執(zhí)行的目標(biāo)任務(wù)可能同時(shí)包括多個(gè)相互之間存在依賴關(guān)系的子任務(wù)。例如,圖1為本發(fā)明實(shí)施例提供的一種同時(shí)包括多個(gè)子任務(wù)的目標(biāo)任務(wù)100的示意圖。如圖1所示,該目標(biāo)任務(wù)100包括五個(gè)子任務(wù),子任務(wù)1、子任務(wù)11、子任務(wù)12、子任務(wù)111和子任務(wù)112。其中,子任務(wù)11和子任務(wù)12的執(zhí)行依賴于子任務(wù)1的執(zhí)行,子任務(wù)111和子任務(wù)112的執(zhí)行依賴于子任務(wù)11的執(zhí)行,也即,子任務(wù)11和子任務(wù)12需在子任務(wù)1執(zhí)行完之后才能執(zhí)行,子任務(wù)111和子任務(wù)112需在子任務(wù)11執(zhí)行完之后才能執(zhí)行。而本發(fā)明實(shí)施例提供的任務(wù)執(zhí)行方法就應(yīng)用于執(zhí)行同時(shí)包括多個(gè)相互之間存在依賴關(guān)系的子任務(wù)的目標(biāo)任務(wù)的場(chǎng)景。
圖2為本發(fā)明實(shí)施例提供的一種任務(wù)執(zhí)行方法流程圖,該任務(wù)執(zhí)行方法應(yīng)用于需執(zhí)行目標(biāo)任務(wù)的終端或服務(wù)器中,如圖2所示,該任務(wù)執(zhí)行方法包括以下步驟:
步驟201:對(duì)于待執(zhí)行的目標(biāo)任務(wù)中的每個(gè)子任務(wù),當(dāng)確定該子任務(wù)執(zhí)行結(jié)束時(shí),將該子任務(wù)作為父任務(wù),并生成該父任務(wù)的子任務(wù);其中,每個(gè)子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符,該標(biāo)識(shí)符用于指示對(duì)應(yīng)的子任務(wù)是否為并發(fā)任務(wù)。
步驟202:當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由該并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù),該并發(fā)線程池包括至少兩個(gè)線程,該并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù)。
在本發(fā)明實(shí)施例中,當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù)。由于并發(fā)線程池包括至少兩個(gè)線程,且并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù),也即,在本發(fā)明實(shí)施例中,存在至少兩個(gè)線程來執(zhí)行目標(biāo)任務(wù)中的子任務(wù),避免由單一的線程來執(zhí)行目標(biāo)任務(wù)的包括的所有子任務(wù),從而可以縮短計(jì)算機(jī)執(zhí)行該目標(biāo)任務(wù)所需的時(shí)間,提高了計(jì)算機(jī)執(zhí)行目標(biāo)任務(wù)的效率。
可選地,生成該父任務(wù)的子任務(wù)之后,還包括:
當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至串行線程中,由該串行線程執(zhí)行該父任務(wù)的子任務(wù),該串行線程用于按照順序執(zhí)行任務(wù)。
可選地,該方法還包括:
分解該目標(biāo)任務(wù),得到該目標(biāo)任務(wù)包括的所有子任務(wù);
確定該目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序;
根據(jù)該目標(biāo)任務(wù)中每個(gè)子任務(wù)的執(zhí)行順序,確定該目標(biāo)任務(wù)的任務(wù)樹,該任務(wù)樹中根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為最先執(zhí)行的子任務(wù);
確定該目標(biāo)任務(wù)的任務(wù)樹中的根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù),并將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。
可選地,該方法還包括:
當(dāng)執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程池中的線程執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
上述所有可選技術(shù)方案,均可按照任意結(jié)合形成本發(fā)明的可選實(shí)施例,本發(fā)明實(shí)施例對(duì)此不再一一贅述。
圖3a為本發(fā)明實(shí)施例提供的另一種任務(wù)執(zhí)行方法流程圖,該任務(wù)執(zhí)行方法應(yīng)用于需執(zhí)行目標(biāo)任務(wù)的終端或服務(wù)器中,如圖3a所示,該任務(wù)執(zhí)行方法包括以下步驟:
步驟301:確定目標(biāo)任務(wù)的任務(wù)樹,并將根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。
在本發(fā)明實(shí)施例中,由于目標(biāo)任務(wù)包括多個(gè)相互之間存在依賴關(guān)系的子任務(wù),因此,在執(zhí)行目標(biāo)任務(wù)時(shí),需先確定最先需要執(zhí)行的子任務(wù)。而在本發(fā)明實(shí)施例中,確定最先需要執(zhí)行的子任務(wù)是通過目標(biāo)任務(wù)的任務(wù)樹來確定的,因此,在執(zhí)行目標(biāo)任務(wù)之前,需先確定目標(biāo)任務(wù)的任務(wù)樹。
具體地,確定目標(biāo)任務(wù)的任務(wù)樹的實(shí)現(xiàn)過程可以為:分解該目標(biāo)任務(wù),得到該目標(biāo)任務(wù)包括的所有子任務(wù),確定該目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序,根據(jù)該目標(biāo)任務(wù)中每個(gè)子任務(wù)的執(zhí)行順序,確定該目標(biāo)任務(wù)的任務(wù)樹,該任務(wù)樹中根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為最先執(zhí)行的子任務(wù)。
其中,確定該目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序,也即,對(duì)于每個(gè)子任務(wù),確定在該子任務(wù)執(zhí)行前必須執(zhí)行的子任務(wù)以及在該子任務(wù)執(zhí)行完成后才可執(zhí)行的子任務(wù)。
另外,任務(wù)樹用于指示目標(biāo)任務(wù)包括的各個(gè)子任務(wù)之間的依賴關(guān)系。任務(wù)樹包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)子任務(wù),并且對(duì)于每個(gè)節(jié)點(diǎn),當(dāng)該節(jié)點(diǎn)存在子節(jié)點(diǎn)時(shí),該子節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)需在該節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)執(zhí)行完之后才能執(zhí)行。
例如,對(duì)于圖1所示的目標(biāo)任務(wù),分解該目標(biāo)任務(wù),得到5個(gè)子任務(wù),子任務(wù)1、子任務(wù)11、子任務(wù)12、子任務(wù)111和子任務(wù)112。對(duì)于這五個(gè)子任務(wù)中的每個(gè)子任務(wù),確定該子任務(wù)的執(zhí)行順序。也即,確定子任務(wù)11、子任務(wù)12、子任務(wù)111和子任務(wù)112必須在子任務(wù)1執(zhí)行完之后才能執(zhí)行,子任務(wù)111和子任務(wù)112必須在子任務(wù)11執(zhí)行完之后才能執(zhí)行。此時(shí),可以根據(jù)該每個(gè)子任務(wù)的執(zhí)行順序,確定如圖3b所示的目標(biāo)任務(wù)的任務(wù)樹。如圖3b所示,該目標(biāo)任務(wù)的任務(wù)樹包括一個(gè)根節(jié)點(diǎn)和四個(gè)葉節(jié)點(diǎn)。其中,根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為子任務(wù)1,根節(jié)點(diǎn)有兩個(gè)葉節(jié)點(diǎn),該兩個(gè)葉節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)分別為子任務(wù)11和子任務(wù)12,子任務(wù)11對(duì)應(yīng)的葉節(jié)點(diǎn)也有兩個(gè)葉節(jié)點(diǎn),該兩個(gè)葉節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)分別為子任務(wù)111和子任務(wù)112。
在確定出目標(biāo)任務(wù)的任務(wù)樹之后,確定該目標(biāo)任務(wù)的任務(wù)樹中的根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù),并將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。例如,對(duì)于圖3b所示的目標(biāo)任務(wù)的任務(wù)樹,由于根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為子任務(wù)1,因此,將子任務(wù)1作為最先執(zhí)行的子任務(wù)。
具體地,執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)的具體實(shí)現(xiàn)過程可以為:當(dāng)執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至該并發(fā)線程池中,由該并發(fā)線程池中的線程執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
由于該并發(fā)線程池中包括至少兩個(gè)線程,為了提高執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)的效率,可以將根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程池中的線程執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。當(dāng)然,在本發(fā)明實(shí)施例中,由于并不存在與根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)沖突的子任務(wù),因此,也可以將根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至串行線程中,由串行線程來執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
在執(zhí)行完根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),對(duì)于該目標(biāo)任務(wù)中包括的其他子任務(wù),其執(zhí)行過程基本相同,也即可以通過下述步驟302至步驟304執(zhí)行該目標(biāo)任務(wù)包括的其他子任務(wù)。
步驟302:對(duì)于待執(zhí)行的目標(biāo)任務(wù)中的每個(gè)子任務(wù),當(dāng)確定該子任務(wù)執(zhí)行結(jié)束時(shí),將該子任務(wù)作為父任務(wù),并生成該父任務(wù)的子任務(wù)。
具體地,當(dāng)確定根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)執(zhí)行結(jié)束時(shí),將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為父任務(wù),并將執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)結(jié)束時(shí)生成的任務(wù)確定該父任務(wù)的子任務(wù),也即生成該父任務(wù)的子任務(wù)。
對(duì)于該父任務(wù)的子任務(wù),按照下述步驟303和步驟304執(zhí)行該父任務(wù)的子任務(wù),當(dāng)確定該父任務(wù)的子任務(wù)執(zhí)行結(jié)束時(shí),重新將該父任務(wù)的子任務(wù)作為下一個(gè)父任務(wù),并生成該下一個(gè)父任務(wù)的子任務(wù),同樣按照下述步驟303和步驟304執(zhí)行該下一個(gè)父任務(wù)的子任務(wù),重復(fù)執(zhí)行上述過程,直至確定該目標(biāo)任務(wù)包括的所有子任務(wù)執(zhí)行完畢。
其中,每個(gè)子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符,該標(biāo)識(shí)符用于指示對(duì)應(yīng)的子任務(wù)是否為并發(fā)任務(wù)。也即,當(dāng)生成該父任務(wù)的子任務(wù)時(shí),該子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符。需要說明的是,該標(biāo)識(shí)符為程序員在編寫任務(wù)時(shí)為該任務(wù)設(shè)置的一種代碼,該代碼用于指示該任務(wù)是否為并發(fā)任務(wù)。
步驟303:當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由該并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù),該并發(fā)線程池包括至少兩個(gè)線程,該并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù)。
其中,預(yù)先為并發(fā)線程池中設(shè)置有第一任務(wù)列表,該第一任務(wù)列表用于緩存添加至并發(fā)線程池中的任務(wù)。此時(shí),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,也即,將該父任務(wù)該父任務(wù)的子任務(wù)添加至并發(fā)線程池的第一任務(wù)列表中。
對(duì)于并發(fā)線程池包括的至少兩個(gè)線程中的每個(gè)線程,當(dāng)該線程當(dāng)前處于閑置狀態(tài)時(shí),該線程將從第一任務(wù)列表中拉取一個(gè)任務(wù)并執(zhí)行,直至將第一任務(wù)列表中的任務(wù)全部執(zhí)行完畢。
例如,圖3c為本發(fā)明實(shí)施例提供的一種線程示意圖。也即,在本發(fā)明實(shí)施例中,用于執(zhí)行任務(wù)的線程包括并發(fā)線程池中的線程和串行線程,其中,該并發(fā)線程池包括3個(gè)線程,線程1、線程2和線程3。當(dāng)確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中的第一任務(wù)列表,由該并發(fā)線程池中處于閑置狀態(tài)的線程執(zhí)行該父任務(wù)的子任務(wù)。
步驟304:當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至串行線程中,由該串行線程執(zhí)行該父任務(wù)的子任務(wù),該串行線程用于按照順序執(zhí)行任務(wù)。
由于串行線程必須按照順序執(zhí)行任務(wù),因此,對(duì)于該串行線程同樣預(yù)先設(shè)置有第二任務(wù)列表,該第二任務(wù)列表用于緩存添加至串行線程中的任務(wù)。此時(shí),當(dāng)確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至第二任務(wù)列表,等待串行線程執(zhí)行。也即,串行線程在將排在該父任務(wù)的子任務(wù)之前的任務(wù)執(zhí)行完畢后,執(zhí)行該父任務(wù)的子任務(wù)。
例如,對(duì)于圖3b所示的目標(biāo)任務(wù),將目標(biāo)任務(wù)的子任務(wù)1添加至圖3c所示的并發(fā)線程池中,由并發(fā)線程池中包括的線程執(zhí)行子任務(wù)1,在子任務(wù)1結(jié)束時(shí),生成子任務(wù)11和子任務(wù)12。對(duì)于子任務(wù)11,通過該子任務(wù)11對(duì)應(yīng)的標(biāo)識(shí)符判斷該子任務(wù)11是否為并發(fā)任務(wù),如果該子任務(wù)11為并發(fā)任務(wù),則將該子任務(wù)11添加至圖3c所示的并發(fā)線程池中,如果該子任務(wù)11不是并發(fā)任務(wù),則將該子任務(wù)11添加至圖3c所示的串行線程中。當(dāng)子任務(wù)11執(zhí)行結(jié)束時(shí),生成子任務(wù)111和子任務(wù)112,按照?qǐng)?zhí)行子任務(wù)11的方法執(zhí)行子任務(wù)111和子任務(wù)112。另外,按照?qǐng)?zhí)行子任務(wù)11的方法執(zhí)行子任務(wù)12,在子任務(wù)12執(zhí)行結(jié)束時(shí),沒有生成相應(yīng)地子任務(wù)。當(dāng)子任務(wù)111和子任務(wù)112執(zhí)行結(jié)束時(shí),也沒有生成相應(yīng)地子任務(wù),此時(shí),確定該目標(biāo)任務(wù)包括的所有子任務(wù)執(zhí)行完畢。
在本發(fā)明實(shí)施例中,當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù),當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至串行線程池中,由串行線程執(zhí)行該父任務(wù)的子任務(wù)。也即,在本發(fā)明實(shí)施例中,用于執(zhí)行目標(biāo)任務(wù)的線程包括并發(fā)線程池包括至少兩個(gè)線程和串行線程,避免由單一的線程來執(zhí)行目標(biāo)任務(wù)的包括的所有子任務(wù),從而可以縮短計(jì)算機(jī)執(zhí)行該目標(biāo)任務(wù)所需的時(shí)間,提高了計(jì)算機(jī)執(zhí)行目標(biāo)任務(wù)的效率。
本發(fā)明實(shí)施例除了提供上述圖2和圖3a所示的任務(wù)執(zhí)行方法,還提供了一種任務(wù)執(zhí)行裝置,參見圖4a,該任務(wù)執(zhí)行裝置400包括生成模塊401和第一添加模塊402:
生成模塊401,用于對(duì)于待執(zhí)行的目標(biāo)任務(wù)中的每個(gè)子任務(wù),當(dāng)確定該子任務(wù)執(zhí)行結(jié)束時(shí),將該子任務(wù)作為父任務(wù),并生成該父任務(wù)的子任務(wù);
其中,每個(gè)子任務(wù)中包括對(duì)應(yīng)的標(biāo)識(shí)符,該標(biāo)識(shí)符用于指示對(duì)應(yīng)的子任務(wù)是否為并發(fā)任務(wù);
第一添加模塊402,用于當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由該并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù),該并發(fā)線程池包括至少兩個(gè)線程,該并發(fā)線程池中的線程用于并發(fā)執(zhí)行任務(wù)。
可選地,參見圖4b,該裝置400還包括第二添加模塊403:
第二添加模塊403,用于當(dāng)基于該父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至串行線程中,由該串行線程執(zhí)行該父任務(wù)的子任務(wù),該串行線程用于按照順序執(zhí)行任務(wù)。
可選地,該裝置400還包括:
分解模塊,用于分解該目標(biāo)任務(wù),得到該目標(biāo)任務(wù)包括的所有子任務(wù);
第一確定模塊,用于確定該目標(biāo)任務(wù)中的每個(gè)子任務(wù)的執(zhí)行順序;
第二確定模塊,用于根據(jù)該目標(biāo)任務(wù)中每個(gè)子任務(wù)的執(zhí)行順序,確定該目標(biāo)任務(wù)的任務(wù)樹,該任務(wù)樹中根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)為最先執(zhí)行的子任務(wù);
第三確定模塊,用于確定該目標(biāo)任務(wù)的任務(wù)樹中的根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù),并將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)作為最先執(zhí)行的子任務(wù)。
可選地,該裝置400還包括:
第三添加模塊,用于當(dāng)執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)時(shí),將該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)添加至該并發(fā)線程池中,由該并發(fā)線程池中的線程執(zhí)行該根節(jié)點(diǎn)對(duì)應(yīng)的子任務(wù)。
在本發(fā)明實(shí)施例中,當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)為并發(fā)任務(wù),將該父任務(wù)的子任務(wù)添加至并發(fā)線程池中,由并發(fā)線程中的線程執(zhí)行該父任務(wù)的子任務(wù),當(dāng)基于父任務(wù)中的子任務(wù)的標(biāo)識(shí)符確定該父任務(wù)的子任務(wù)不是并發(fā)任務(wù)時(shí),將該父任務(wù)的子任務(wù)添加至串行線程池中,由串行線程執(zhí)行該父任務(wù)的子任務(wù)。也即,在本發(fā)明實(shí)施例中,用于執(zhí)行目標(biāo)任務(wù)的線程包括并發(fā)線程池包括至少兩個(gè)線程和串行線程,避免由單一的線程來執(zhí)行目標(biāo)任務(wù)的包括的所有子任務(wù),從而可以縮短計(jì)算機(jī)執(zhí)行該目標(biāo)任務(wù)所需的時(shí)間,提高了計(jì)算機(jī)執(zhí)行目標(biāo)任務(wù)的效率。
需要說明的是:上述實(shí)施例提供的任務(wù)執(zhí)行裝置在執(zhí)行任務(wù)時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將設(shè)備的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的任務(wù)執(zhí)行裝置與任務(wù)執(zhí)行方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。
圖5是本發(fā)明實(shí)施例提供的另一種任務(wù)執(zhí)行裝置500的框圖。例如,裝置500可以被提供為一服務(wù)器或一終端。參照?qǐng)D5,裝置500包括處理器501、通信接口502、存儲(chǔ)器503和通信總線504。
如圖5所示,處理器501,通信接口502和存儲(chǔ)器503通過通信總線504完成相互間的通信。
處理器501可以是一個(gè)cpu(centralprocessingunit,中央處理器),微處理器,asic(application-specificintegratedcircuit,特定應(yīng)用集成電路),或一個(gè)或多個(gè)用于控制本申請(qǐng)方案程序執(zhí)行的集成電路。
通信總線504可包括一通路,在上述組件之間傳送信息。
存儲(chǔ)器503可以是rom(read-onlymemory,只讀存儲(chǔ)器)或可存儲(chǔ)靜態(tài)信息和指令的其它類型的靜態(tài)存儲(chǔ)設(shè)備,ram(randomaccessmemory,隨機(jī)存取存儲(chǔ)器)或者可存儲(chǔ)信息和指令的其它類型的動(dòng)態(tài)存儲(chǔ)設(shè)備,也可以是eeprom(electricallyerasableprogrammableread-onlymemory,電可擦可編程只讀存儲(chǔ)器)、cd-rom(compactdiscread-onlymemory,只讀光盤)或其它光盤存儲(chǔ)、光碟存儲(chǔ)(包括壓縮光碟、激光碟、光碟、數(shù)字通用光碟、藍(lán)光光碟等)、磁盤存儲(chǔ)介質(zhì)或者其它磁存儲(chǔ)設(shè)備、或者能夠用于攜帶或存儲(chǔ)具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計(jì)算機(jī)存取的任何其它介質(zhì),但不限于此。存儲(chǔ)器503可以是獨(dú)立存在,通過通信總線504與處理器501相連接。存儲(chǔ)器503也可以和處理器501集成在一起。
通信接口502,使用任何收發(fā)器一類的裝置,用于與其它設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng),wlan(wirelesslocalareanetworks,無線局域網(wǎng))等。
其中,存儲(chǔ)器503用于存儲(chǔ)執(zhí)行本申請(qǐng)方案的計(jì)算機(jī)程序,并由處理器501來控制執(zhí)行。也即,處理器501用于執(zhí)行存儲(chǔ)器上所存放的程序,以實(shí)現(xiàn)圖2和圖3a所示實(shí)施例提供的任務(wù)執(zhí)行方法。
在示例性實(shí)施例中,還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)內(nèi)存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)的計(jì)算機(jī)程序由服務(wù)器的處理器執(zhí)行時(shí),使得服務(wù)器能夠執(zhí)行圖2和圖3a所示實(shí)施例提供的任務(wù)執(zhí)行方法。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。