專利名稱:一種多任務(wù)并發(fā)調(diào)度方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種多任務(wù)并發(fā)調(diào)度方法及系統(tǒng)。
背景技術(shù):
軟件開發(fā)者經(jīng)常遇到任務(wù)調(diào)度及控制問題,比如每天指定時間進(jìn)行網(wǎng)絡(luò)設(shè)備數(shù)據(jù)上傳,在數(shù)據(jù)上傳時可以進(jìn)行停止、暫停及恢復(fù)操作。如基于Java平臺的軟件開發(fā)者,可以使用Java平臺提供的時鐘組件或者各種任務(wù)調(diào)度組件(比如Quartz)完成任務(wù)調(diào)度工作,但這些組件并沒有提供有關(guān)聯(lián)關(guān)系的多任務(wù)并發(fā)調(diào)度與控制(包括停止、暫停、恢復(fù)等操作)功能。同理,其它平臺關(guān)聯(lián)關(guān)系指任務(wù)之間存在并行或依賴關(guān)系。如圖I所示,任務(wù)Ai、Bi、Ci (i為正整數(shù))構(gòu)成一個任務(wù)組,它們存在如下關(guān)系
關(guān)系I :任務(wù)Al、BI、Cl需要同時開始執(zhí)行;
關(guān)系2 :任務(wù)之間存在并行關(guān)系,比如任務(wù)Al、BI、Cl需要并行執(zhí)行;
關(guān)系3 :任務(wù)之間存在依賴關(guān)系,比如任務(wù)A4依賴于任務(wù)A2及A3,即只有任務(wù)A2、A3都執(zhí)行后,A4才能執(zhí)行。多任務(wù)的停止操作,指對處于運(yùn)行狀態(tài)的多任務(wù)組執(zhí)行停止操作,將正在運(yùn)行的任務(wù)運(yùn)行完,其余沒有運(yùn)行的任務(wù)不再運(yùn)行;
多任務(wù)的暫停操作,指對處于運(yùn)行狀態(tài)的多任務(wù)執(zhí)行暫停操作,將正在運(yùn)行的任務(wù)運(yùn)行完,沒有運(yùn)行的任務(wù)不再運(yùn)行,并記錄已運(yùn)行的任務(wù)及結(jié)果,為多任務(wù)恢復(fù)運(yùn)行做準(zhǔn)備;多任務(wù)的恢復(fù)操作,指對處于暫停狀態(tài)的多任務(wù)執(zhí)行恢復(fù)操作,將暫停時沒有運(yùn)行的任務(wù)運(yùn)行完,已經(jīng)運(yùn)行的任務(wù)不再重復(fù)運(yùn)行。目前軟件開發(fā)者在解決上述有關(guān)聯(lián)關(guān)系的多任務(wù)并發(fā)調(diào)度及控制問題時,一般處理方法如下
1.引入工作流組件。但采用這種方法會造成開發(fā)難度和成本上升,需要消耗更多的系統(tǒng)資源(包括CPU、內(nèi)存等);
2.根據(jù)具體情況將多個任務(wù)轉(zhuǎn)化成一個任務(wù),即將原有的各個任務(wù)轉(zhuǎn)化為一個大任務(wù)的串行步驟。但這種方法沒有很好的通用性和并發(fā)性,邏輯復(fù)雜且不方便修改維護(hù)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種多任務(wù)并發(fā)調(diào)度方法及系統(tǒng),以實現(xiàn)通用、簡單、高效的多任務(wù)并發(fā)執(zhí)行。
為解決上述問題,本發(fā)明提供了一種多任務(wù)并發(fā)調(diào)度方法,應(yīng)用于可運(yùn)行至少兩個并行任務(wù)的調(diào)度系統(tǒng)中,包括
根據(jù)所述調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系;
所述調(diào)度系統(tǒng)中設(shè)有總控任務(wù),所述總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。進(jìn)一步地,所述方法還包括
根據(jù)所述各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系;
所述發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程,具體包括
根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該任務(wù)的后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該任務(wù)的后繼任務(wù)。進(jìn)一步地,
所述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件;
所述調(diào)度該任務(wù)的后繼任務(wù),具體包括判斷系統(tǒng)中是否設(shè)置有該任務(wù)的后繼任務(wù)對應(yīng)的任務(wù)執(zhí)行條件;若沒有,則開始執(zhí)行該任務(wù)的后繼任務(wù);否則,判斷是否滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件,若滿足,則開始執(zhí)行該任務(wù)的后繼任務(wù);若不滿足,則在滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件時再開始執(zhí)行該任務(wù)的后繼任務(wù)。進(jìn)一步地,所述方法還包括
所述總控任務(wù)在所述調(diào)度系統(tǒng)中創(chuàng)建任務(wù)結(jié)果哈希表,所述任務(wù)結(jié)果哈希表中每條記錄對應(yīng)任務(wù)標(biāo)識和任務(wù)結(jié)果兩個字段;
當(dāng)一任務(wù)執(zhí)行完成后,所述調(diào)度系統(tǒng)將該任務(wù)的任務(wù)標(biāo)識和任務(wù)結(jié)果添加到所述任務(wù)結(jié)果哈希表中;
根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成,具體包括
根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄。進(jìn)一步地,所述方法還包括
所述根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄,具體包括
在獲取到所述任務(wù)結(jié)果哈希表的同步鎖后,再根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄;在查找完成后,釋放所述同步鎖。進(jìn)一步地,所述方法還包括 當(dāng)收到用戶發(fā)來的暫停命令或停止命令后,所述調(diào)度系統(tǒng)保存所述任務(wù)結(jié)果哈希表;當(dāng)收到用戶發(fā)來的恢復(fù)命令時,所述調(diào)度系統(tǒng)重新調(diào)度所述總控任務(wù),所述總控任務(wù)根據(jù)所述任務(wù)結(jié)果哈希表中的記錄,重新調(diào)度所述任務(wù)結(jié)果哈希表中記錄的任務(wù)的未執(zhí)行過的后繼任務(wù)。進(jìn)一步地,
所述總控任務(wù)的任務(wù)執(zhí)行條件被設(shè)置為所述總控任務(wù)的后繼任務(wù)的任務(wù)執(zhí)行條件; 所述總控任務(wù)被調(diào)度,具體包括在滿足所述總控任務(wù)的任務(wù)執(zhí)行條件時,執(zhí)行所述總控任務(wù)。進(jìn)一步地,所述方法還包括
當(dāng)所述調(diào)度系統(tǒng)運(yùn)行于Java平臺時,所述總控任務(wù)利用Java命名和目錄接口技術(shù),在人機(jī)交互界面上顯示所述調(diào)度系統(tǒng)中執(zhí)行的各任務(wù)的工作狀態(tài);
其中,所述工作狀態(tài)包括運(yùn)行中、停止中、暫停中、已停止或已暫停。進(jìn)一步地,所述方法還包括
所述總控任務(wù)在所述調(diào)度系統(tǒng)中創(chuàng)建線程池;
所述開始執(zhí)行該任務(wù)的后繼任務(wù),具體包括將該任務(wù)的后繼任務(wù)放入所述線程池中進(jìn)行處理。相應(yīng)地,本發(fā)明還提供了一種多任務(wù)并發(fā)調(diào)度系統(tǒng),包括
第一裝置,用于根據(jù)所述調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系;
總控任務(wù),所述總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);第二裝置,用于在所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。進(jìn)一步地,所述系統(tǒng)還包括
第三裝置,用于根據(jù)所述各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系;
所述發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程,具體包括
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該任務(wù)的后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該任務(wù)的后繼任務(wù)。進(jìn)一步地,
所述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件;
所述調(diào)度該任務(wù)的后繼任務(wù),具體包括所述第二裝置用于判斷系統(tǒng)中是否設(shè)置有該任務(wù)的后繼任務(wù)對應(yīng)的任務(wù)執(zhí)行條件;若沒有,則開始執(zhí)行該任務(wù)的后繼任務(wù);否則,判斷是否滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件,若滿足,則開始執(zhí)行該任務(wù)的后繼任務(wù);若不滿足,則在滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件時再開始執(zhí)行該任務(wù)的后繼任務(wù)。進(jìn)一步地,
所述總控任務(wù)用于在所述調(diào)度系統(tǒng)中創(chuàng)建任務(wù)結(jié)果哈希表,所述任務(wù)結(jié)果哈希表中每條記錄對應(yīng)任務(wù)標(biāo)識和任務(wù)結(jié)果兩個字段;
所述系統(tǒng)中還包括第四裝置,用于當(dāng)一任務(wù)執(zhí)行完成后,將該任務(wù)的任務(wù)標(biāo)識和任務(wù)結(jié)果添加到所述任務(wù)結(jié)果哈希表中;
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成,具體包括
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄。進(jìn)一步地,所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄,具體包括
所述第二裝置用于在獲取到所述任務(wù)結(jié)果哈希表的同步鎖后,再根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄;在查找完成后,釋放所述同步鎖。進(jìn)一步地,所述系統(tǒng)還包括
第五裝置,用于當(dāng)收到用戶發(fā)來的暫停命令或停止命令后,保存所述任務(wù)結(jié)果哈希
表;
第六裝置,用于當(dāng)收到用戶發(fā)來的恢復(fù)命令時,重新調(diào)度所述總控任務(wù); 所述總控任務(wù)用于根據(jù)所述任務(wù)結(jié)果哈希表中的記錄,重新調(diào)度所述任務(wù)結(jié)果哈希表中記錄的任務(wù)的未執(zhí)行過的后繼任務(wù)。進(jìn)一步地,所述系統(tǒng)還包括
所述總控任務(wù)還用于在所述調(diào)度系統(tǒng)中創(chuàng)建線程池;
所述開始執(zhí)行該任務(wù)的后繼任務(wù),具體包括所述總控任務(wù)用于將該任務(wù)的后繼任務(wù)放入所述線程池中進(jìn)行處理。本發(fā)明提供了一種簡單、高效、通用的多任務(wù)并發(fā)調(diào)度方案,使軟件開發(fā)者可以利用現(xiàn)有的調(diào)度系統(tǒng),輕松實現(xiàn)具有關(guān)聯(lián)關(guān)系的多任務(wù)并發(fā)調(diào)度與控制,與現(xiàn)有實現(xiàn)方案相t匕,任務(wù)并發(fā)調(diào)度與控制(停止、暫停及恢復(fù))不需要開發(fā)者編寫任何代碼,使開發(fā)者可以更專注于任務(wù)本身的工作。
圖I是現(xiàn)有技術(shù)中并發(fā)的多任務(wù)關(guān)系結(jié)構(gòu) 圖2是本發(fā)明實施例中多任務(wù)并發(fā)調(diào)度方法流程 圖3是本發(fā)明實施例中系統(tǒng)中各任務(wù)的關(guān)系結(jié)構(gòu) 圖4是本發(fā)明實施例中任務(wù)抽象模型 圖5是本發(fā)明實施例中總控任務(wù)并發(fā)調(diào)度及控制方法流程 圖6是本發(fā)明實施例中線程池中運(yùn)行后繼任務(wù)流程圖。
具體實施例方式下文中將結(jié)合附圖對本發(fā)明的實施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。在本實施例中,如圖2所示,多任務(wù)并發(fā)調(diào)度方法,應(yīng)用于可運(yùn)行至少兩個并行任務(wù)的系統(tǒng)中,包括
步驟I、根據(jù)各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)的第一對應(yīng)關(guān)系;
步驟2、在上述系統(tǒng)中增設(shè)總控任務(wù),該總控任務(wù)的后繼任務(wù)被設(shè)置為上述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);
步驟3、總控任務(wù)被調(diào)度后,并發(fā)調(diào)度該總控任務(wù)的所有后繼任務(wù);對于系統(tǒng)中除所述總控任務(wù)外的每一任務(wù),在該任務(wù)執(zhí)行完成后,由總控任務(wù)根據(jù)上述第一對應(yīng)關(guān)系判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起調(diào)度該任務(wù)的后繼任務(wù)。在本發(fā)明的另一實施例中,在步驟I中,根據(jù)各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),還可以記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系;在發(fā)起調(diào)度該任務(wù)的后繼任務(wù)時,根據(jù)該第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該后繼任務(wù)。在本發(fā)明的另一實施例中,上述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件;則調(diào)度一任務(wù)具體包括判斷系統(tǒng)中是否設(shè)置有 該任務(wù)的任務(wù)執(zhí)行條件;若沒有,則執(zhí)行該任務(wù);否則,判斷是否滿足該任務(wù)的執(zhí)行條件,若滿足,則執(zhí)行該任務(wù);若不滿足,則在滿足該任務(wù)的執(zhí)行條件時再執(zhí)行該任務(wù)。在本發(fā)明的另一實施例中,上述方法還包括總控任務(wù)利用JNDI (Java Namingand Directory Interface, Java命名和目錄接口)技術(shù),在人機(jī)交互界面上顯示系統(tǒng)中執(zhí)行的除總控任務(wù)之外的其他各任務(wù)的工作狀態(tài)。其中,工作狀態(tài)包括運(yùn)行中、停止中及暫停中。所述系統(tǒng)中設(shè)置有線程池;則執(zhí)行一任務(wù)是指將任務(wù)放入線程池中進(jìn)行執(zhí)行。下面對本發(fā)明進(jìn)行進(jìn)一步說明。在本實施例中建立任務(wù)的抽象模型,如圖4將任務(wù)分為五個組成部分,包括任務(wù)ID、任務(wù)工作、任務(wù)執(zhí)行條件、任務(wù)關(guān)系及任務(wù)屬性,具體說明如下
任務(wù)ID :即任務(wù)標(biāo)識符,用于唯一標(biāo)識一個任務(wù);
任務(wù)工作任務(wù)具體要做的事情,比如打掃衛(wèi)生任務(wù),打掃衛(wèi)生就是任務(wù)的工作;任務(wù)執(zhí)行條件在滿足一定的執(zhí)行條件的前提下才能執(zhí)行任務(wù),比如每天6點(diǎn)打掃衛(wèi)生,每天6點(diǎn)即是任務(wù)執(zhí)行條件;
任務(wù)關(guān)系用于記錄本任務(wù)的如驅(qū)任務(wù)和后繼任務(wù);
任務(wù)屬性任務(wù)其他相關(guān)內(nèi)容,比如任務(wù)創(chuàng)建時間、任務(wù)創(chuàng)建人、任務(wù)數(shù)據(jù)等。本實施例采用樹結(jié)構(gòu),用遞歸定義的方式記錄任務(wù)之間的關(guān)系。本實施例抽象出一個總控任務(wù),結(jié)構(gòu)如圖3所示,它的工作是負(fù)責(zé)系統(tǒng)中其他任務(wù)的并發(fā)調(diào)度及控制,總控任務(wù)的任務(wù)執(zhí)行條件與其后繼任務(wù)的觸發(fā)條件(等同于任務(wù)執(zhí)行條件)相同,它的任務(wù)關(guān)系記錄了自己的后繼任務(wù)。軟件開發(fā)者使用本發(fā)明的任務(wù)抽象模型,創(chuàng)建自己的各個任務(wù),并根據(jù)任務(wù)之間的依賴與并行關(guān)系,建立好各任務(wù)的關(guān)聯(lián),然后再與總控制任務(wù)關(guān)聯(lián)。將總控任務(wù)加入Java平臺現(xiàn)有的調(diào)度系統(tǒng)。當(dāng)總控任務(wù)被調(diào)度后,它負(fù)責(zé)并發(fā)調(diào)度自己的所有后繼任務(wù),調(diào)度時采用線程池技術(shù)提高調(diào)度的效率和安全性,采用Java的同步控制技術(shù)控制并發(fā)調(diào)度的正確性??偪厝蝿?wù)可通過JNDI技術(shù),向軟件開發(fā)者共享自己的任務(wù)調(diào)度狀態(tài);軟件開發(fā)者可通過修改共享的任務(wù)調(diào)度狀態(tài),實現(xiàn)任務(wù)的停止與暫停??偪厝蝿?wù)在收到暫停命令后,會保存已執(zhí)行過的任務(wù)及結(jié)果,軟件開發(fā)者可以通過總控任務(wù)的ID查找到這些任務(wù)執(zhí)行記錄。軟件開發(fā)者恢復(fù)任務(wù)調(diào)度時,首先通過JNDI技術(shù)共享任務(wù)執(zhí)行記錄,然后重新啟動總控任務(wù),總控任務(wù)會到JNDI中查找任務(wù)執(zhí)行記錄,然后繼續(xù)執(zhí)行沒有執(zhí)行的任務(wù)。
本發(fā)明的多任務(wù)并發(fā)調(diào)度方法實施方式分三步,包括
步驟110、軟件開發(fā)者根據(jù)上述抽象模型創(chuàng)建多個任務(wù),并建立這些任務(wù)之間的關(guān)聯(lián)關(guān)系(即使用本實施例的任務(wù)模型關(guān)聯(lián)關(guān)系結(jié)構(gòu)),然后創(chuàng)建一個總控制任務(wù),設(shè)置其執(zhí)行條件并與上述已創(chuàng)建的任務(wù)建立關(guān)聯(lián),最后將總控任務(wù)放入現(xiàn)有的任務(wù)調(diào)度系統(tǒng)(比如Timer、Quartz);
步驟120、當(dāng)滿足任務(wù)執(zhí)行條件后,現(xiàn)有的調(diào)度系統(tǒng)調(diào)度總控任務(wù),總控任務(wù)并發(fā)調(diào)度其后繼任務(wù),并發(fā)調(diào)度過程在后面說明;
步驟130、軟件開發(fā)者在任務(wù)運(yùn)行過程中,可使用總控任務(wù)共享的任務(wù)狀態(tài)控制變量進(jìn)行任務(wù)的停止或暫停操作;如果收到暫停命令,總控任務(wù)會自動保存當(dāng)前任務(wù)的執(zhí)行情況,為任務(wù)恢復(fù)執(zhí)行做準(zhǔn)備。任務(wù)暫停后,軟件開發(fā)者可以通過在JNDI中共享任務(wù)上次執(zhí)行情況,在重新運(yùn)行總控任務(wù)后,總控任務(wù)會根據(jù)任務(wù)上次執(zhí)行情況進(jìn)行任務(wù)執(zhí)行恢復(fù)工作。 如圖5所示,總控制任務(wù)的任務(wù)并發(fā)調(diào)度過程,包括
步驟210、為總控任務(wù)創(chuàng)建同步控制變量,包括如下步驟
1.創(chuàng)建一個同步變量TaskStatus,用于進(jìn)行任務(wù)狀態(tài)控制,初始化為正在運(yùn)行,并放A JNDI中進(jìn)行共享;
2.創(chuàng)建一個同步變量RunningSubTasksNum,用于記錄正在運(yùn)行的后繼任務(wù)數(shù),初始值為0 ;
3.創(chuàng)建一個同步變量TaskLock,用于控制執(zhí)行總控任務(wù)的線程。步驟220、總控任務(wù)創(chuàng)建執(zhí)行任務(wù)的線程池,采用線程池技術(shù)可以防止因并發(fā)新建線程過多造成的系統(tǒng)崩潰,同時節(jié)省了反復(fù)創(chuàng)建線程的時間。為了減少線程池的數(shù)量,節(jié)省資源,可以將線程池緩存反復(fù)使用;
步驟230、總控任務(wù)創(chuàng)建任務(wù)結(jié)果記錄表并初始化,在JNDI中創(chuàng)建本任務(wù)的任務(wù)結(jié)果哈希表TaskResultTable并放入總控任務(wù)的執(zhí)行結(jié)果。該表中每一條記錄對應(yīng)兩個字段,其中,字段Key用于記錄任務(wù)ID,字段Value用于記錄任務(wù)結(jié)果,這個結(jié)果只具備標(biāo)識作用,用于表示總控任務(wù)的后繼任務(wù)可以運(yùn)行,以圖3為例,當(dāng)總控任務(wù)對應(yīng)的Value的值不為空時,表不任務(wù)Al、BI、Cl可以運(yùn)打;
步驟240、總控任務(wù)獲取可運(yùn)行的后繼任務(wù),方法如下
總控任務(wù)采用樹遍歷算法,依次遍歷總控任務(wù)的后繼任務(wù),如果發(fā)現(xiàn)一個后繼任務(wù)可以運(yùn)行,則不再遍歷該后繼任務(wù)的后繼任務(wù)。其中,一個后繼任務(wù)可運(yùn)行的條件是它的前驅(qū)任務(wù)都已執(zhí)行完,即該后繼任務(wù)的所有前驅(qū)任務(wù)在TaskResultTable中存在結(jié)果;
步驟250、總控任務(wù)判斷是否有可執(zhí)行的后繼任務(wù),如果沒有則直接結(jié)束;如果有,則執(zhí)行下一步驟;
步驟260、總控任務(wù)根據(jù)可執(zhí)行的后繼任務(wù)的數(shù)量對應(yīng)修改變量RunningSubTasksNum的值;
步驟270、調(diào)度系統(tǒng)控制總控任務(wù)進(jìn)入等待狀態(tài),即運(yùn)行總控任務(wù)的線程在同步變量TaskLock上進(jìn)入等待狀態(tài),所有后繼任務(wù)運(yùn)行完會喚醒這個線程繼續(xù)運(yùn)行;
步驟280、調(diào)度系統(tǒng)在線程池中并發(fā)運(yùn)行步驟240獲取的可執(zhí)行的后繼任務(wù),具體流程在后續(xù)進(jìn)行描述;
步驟290、后繼任務(wù)運(yùn)行結(jié)束后,調(diào)度系統(tǒng)喚醒總控任務(wù)??偪厝蝿?wù)被喚醒后,檢查任務(wù)狀態(tài)TaskStatus的值,如果狀態(tài)是暫停狀態(tài)且有任務(wù)沒有運(yùn)行完,則保存TaskResultTable,供任務(wù)恢復(fù)時使用。其中,任務(wù)是否全部運(yùn)行完可根據(jù)TaskResultTable中的記錄數(shù)判斷,若表中的記錄數(shù)等于調(diào)度系統(tǒng)中所有任務(wù)(包括總控任務(wù))的數(shù)目,則確定任務(wù)已全部運(yùn)行完成;否則,確定任務(wù)未全部運(yùn)行完成。調(diào)度系統(tǒng)在線程池中運(yùn)行后繼任務(wù)的流程,如圖6所示,包括
步驟310、在JNDI中獲取總控任務(wù)創(chuàng)建的變量TaskStatus的同步控制鎖,可使用Java的同步關(guān)鍵字synchronized ;
步驟320、檢查TaskStatus的值,其值用于表示任務(wù)的當(dāng)前狀態(tài),包括正在運(yùn)行、停止中、暫停中、已停止或已暫停;
步驟331、當(dāng)該后繼任務(wù)處于正在運(yùn)行狀態(tài)時,釋放TaskStatus的同步控制鎖,即退出synchronized同步控制塊; 步驟332、執(zhí)行該后繼任務(wù);
步驟333、該后繼任務(wù)執(zhí)行完成后,將正在運(yùn)行的后繼任務(wù)數(shù)減一,表示當(dāng)前后繼任務(wù)運(yùn)行完;
步驟334、查找該后繼任務(wù)的所有可運(yùn)行后繼任務(wù),后繼任務(wù)可運(yùn)行的標(biāo)準(zhǔn)是它的前驅(qū)任務(wù)全部運(yùn)行完。該查找過程需要在獲取到TaskResultTable的同步鎖后再進(jìn)行,以防止在查找過程中TaskResultTable被修改;
步驟335、判斷是否有可運(yùn)行的后繼任務(wù);
步驟336、若有可運(yùn)行的后繼任務(wù),在RunningSubTasksNum中同步增加可運(yùn)行的后繼任務(wù)數(shù);
步驟337、將可運(yùn)行的后繼任務(wù)放入線程池中執(zhí)行,這里是迭代調(diào)度,依靠這種調(diào)度并行執(zhí)行所有后繼任務(wù),然后結(jié)束;
步驟338、若沒有可運(yùn)行的后繼任務(wù),則根據(jù)TaskResultTable表中記錄的任務(wù)數(shù)判斷系統(tǒng)中所有任務(wù)是否已執(zhí)行完,如果表中記錄的任務(wù)數(shù)等于總控任務(wù)加系統(tǒng)中除總控任務(wù)之外所有的任務(wù)的數(shù)目,則表示任務(wù)都運(yùn)行完;
步驟339、通過同步變量TaskLock喚醒執(zhí)行總控任務(wù)的線程;
步驟341、如果總控任務(wù)處于停止中或暫停中狀態(tài),檢查是否有其他后繼任務(wù)在運(yùn)行,即判斷RunningSubTasksNum的值是否等于1,等于I則表示沒有其他后繼任務(wù)在運(yùn)行;步驟342、若有其他后繼任務(wù)在運(yùn)行,將RunningSubTasksNum的值減一。步驟343、若沒有其他后繼任務(wù)在運(yùn)行,相應(yīng)地設(shè)置TaskStatus的值表示停止或暫停;
步驟344、釋放TaskStatus的同步控制鎖,即退出synchronized同步控制塊。調(diào)度系統(tǒng)在收到停止或暫停命令時,停止/暫停正在執(zhí)行的任務(wù)的過程步驟如下
在JNDI中查找到需要停止/暫停的總控任務(wù)同步變量TaskStatus,設(shè)置其值表示任務(wù)狀態(tài)為停止中/暫停中,正在運(yùn)行的任務(wù)會根據(jù)任務(wù)狀態(tài)停止或暫停。調(diào)度系統(tǒng)在收到恢復(fù)命令時,恢復(fù)任務(wù)運(yùn)行的步驟如下
步驟510將總控任務(wù)暫停時保存的任務(wù)執(zhí)行結(jié)果表TaskResultTable放入JNDI中共步驟520重新運(yùn)行總控任務(wù),即可完成恢復(fù)操作。相應(yīng)地,本實施例中,一種多任務(wù)并發(fā)調(diào)度系統(tǒng),包括
第一裝置,用于根據(jù)所述調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系;
總控任務(wù),所述總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);第二裝置,用于在所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。較優(yōu)地,所述系統(tǒng)還包括
第三裝置,用于根據(jù)所述各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系;
所述發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程,具體包括
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該任務(wù)的后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該任務(wù)的后繼任務(wù)。較優(yōu)地,所述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件;
所述調(diào)度該任務(wù)的后繼任務(wù),具體包括所述第二裝置用于判斷系統(tǒng)中是否設(shè)置有該任務(wù)的后繼任務(wù)對應(yīng)的任務(wù)執(zhí)行條件;若沒有,則開始執(zhí)行該任務(wù)的后繼任務(wù);否則,判斷是否滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件,若滿足,則開始執(zhí)行該任務(wù)的后繼任務(wù);若不滿足,則在滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件時再開始執(zhí)行該任務(wù)的后繼任務(wù)。較優(yōu)地,所述總控任務(wù)用于在所述調(diào)度系統(tǒng)中創(chuàng)建任務(wù)結(jié)果哈希表,所述任務(wù)結(jié)果哈希表中每條記錄對應(yīng)任務(wù)標(biāo)識和任務(wù)結(jié)果兩個字段;
所述系統(tǒng)中還包括第四裝置,用于當(dāng)一任務(wù)執(zhí)行完成后,將該任務(wù)的任務(wù)標(biāo)識和任務(wù)結(jié)果添加到所述任務(wù)結(jié)果哈希表中;
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成,具體包括
所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄。較優(yōu)地,所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄,具體包括
所述第二裝置用于在獲取到所述任務(wù)結(jié)果哈希表的同步鎖后,再根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄;在查找完成后,釋放所述同步鎖。較優(yōu)地,所述系統(tǒng)還包括
第五裝置,用于當(dāng)收到用戶發(fā)來的暫停命令或停止命令后,保存所述任務(wù)結(jié)果哈希
表;
第六裝置,用于當(dāng)收到用戶發(fā)來的恢復(fù)命令時,重新調(diào)度所述總控任務(wù);
所述總控任務(wù)用于根據(jù)所述任務(wù)結(jié)果哈希表中的記錄,重新調(diào)度所述任務(wù)結(jié)果哈希表中記錄的任務(wù)的未執(zhí)行過的后繼任務(wù)。
較優(yōu)地,所述系統(tǒng)還包括
所述總控任務(wù)還用于在所述調(diào)度系統(tǒng)中創(chuàng)建線程池;
所述開始執(zhí)行該任務(wù)的后繼任務(wù),具體包括所述總控任務(wù)用于將該任務(wù)的后繼任務(wù)放入所述線程池中進(jìn)行處理。本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲于計算機(jī)可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng)地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。根據(jù) 本發(fā)明的發(fā)明內(nèi)容,還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.ー種多任務(wù)并發(fā)調(diào)度方法,應(yīng)用于可運(yùn)行至少兩個并行任務(wù)的調(diào)度系統(tǒng)中,包括 根據(jù)所述調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系; 所述調(diào)度系統(tǒng)中設(shè)有總控任務(wù),所述總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù); 所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。
2.如權(quán)利要求I所述的方法,其特征在于,所述方法還包括 根據(jù)所述各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系; 所述發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程,具體包括 根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該任務(wù)的后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該任務(wù)的后繼任務(wù)。
3.如權(quán)利要求2所述的方法,其特征在干, 所述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件; 所述調(diào)度該任務(wù)的后繼任務(wù),具體包括判斷系統(tǒng)中是否設(shè)置有該任務(wù)的后繼任務(wù)對應(yīng)的任務(wù)執(zhí)行條件;若沒有,則開始執(zhí)行該任務(wù)的后繼任務(wù);否則,判斷是否滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件,若滿足,則開始執(zhí)行該任務(wù)的后繼任務(wù);若不滿足,則在滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件時再開始執(zhí)行該任務(wù)的后繼任務(wù)。
4.如權(quán)利要求2或3所述的方法,其特征在于,所述方法還包括 所述總控任務(wù)在所述調(diào)度系統(tǒng)中創(chuàng)建任務(wù)結(jié)果哈希表,所述任務(wù)結(jié)果哈希表中每條記錄對應(yīng)任務(wù)標(biāo)識和任務(wù)結(jié)果兩個字段; 當(dāng)一任務(wù)執(zhí)行完成后,所述調(diào)度系統(tǒng)將該任務(wù)的任務(wù)標(biāo)識和任務(wù)結(jié)果添加到所述任務(wù)結(jié)果哈希表中; 根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成,具體包括 根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄。
5.如權(quán)利要求4所述的方法,其特征在于,所述方法還包括 所述根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄,具體包括 在獲取到所述任務(wù)結(jié)果哈希表的同步鎖后,再根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄;在查找完成后,釋放所述同步鎖。
6.如權(quán)利要求4所述的方法,其特征在于,所述方法還包括 當(dāng)收到用戶發(fā)來的暫停命令或停止命令后,所述調(diào)度系統(tǒng)保存所述任務(wù)結(jié)果哈希表; 當(dāng)收到用戶發(fā)來的恢復(fù)命令時,所述調(diào)度系統(tǒng)重新調(diào)度所述總控任務(wù),所述總控任務(wù)根據(jù)所述任務(wù)結(jié)果哈希表中的記錄,重新調(diào)度所述任務(wù)結(jié)果哈希表中記錄的任務(wù)的未執(zhí)行過的后繼任務(wù)。
7.如權(quán)利要求3所述的方法,其特征在干, 所述總控任務(wù)的任務(wù)執(zhí)行條件被設(shè)置為所述總控任務(wù)的后繼任務(wù)的任務(wù)執(zhí)行條件; 所述總控任務(wù)被調(diào)度,具體包括 在滿足所述總控任務(wù)的任務(wù)執(zhí)行條件時,執(zhí)行所述總控任務(wù)。
8.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括 當(dāng)所述調(diào)度系統(tǒng)運(yùn)行于Java平臺時,所述總控任務(wù)利用Java命名和目錄接ロ技術(shù),在人機(jī)交互界面上顯示所述調(diào)度系統(tǒng)中執(zhí)行的各任務(wù)的工作狀態(tài); 其中,所述工作狀態(tài)包括運(yùn)行中、停止中、暫停中、已停止或已暫停。
9.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括 所述總控任務(wù)在所述調(diào)度系統(tǒng)中創(chuàng)建線程池; 所述開始執(zhí)行該任務(wù)的后繼任務(wù),具體包括將該任務(wù)的后繼任務(wù)放入所述線程池中進(jìn)行處理。
10.ー種多任務(wù)并發(fā)調(diào)度系統(tǒng),包括 第一裝置,用于根據(jù)所述調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系; 總控任務(wù),所述總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);第二裝置,用于在所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括 第三裝置,用于根據(jù)所述各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在前驅(qū)任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的前驅(qū)任務(wù)之間的第二對應(yīng)關(guān)系; 所述發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程,具體包括 所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成;若均已執(zhí)行完成,則調(diào)度該任務(wù)的后繼任務(wù);否則,待該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)均已執(zhí)行完成后再調(diào)度該任務(wù)的后繼任務(wù)。
12.如權(quán)利要求11所述的系統(tǒng),其特征在干, 所述系統(tǒng)中至少設(shè)置有部分任務(wù)的任務(wù)執(zhí)行條件; 所述調(diào)度該任務(wù)的后繼任務(wù),具體包括所述第二裝置用于判斷系統(tǒng)中是否設(shè)置有該任務(wù)的后繼任務(wù)對應(yīng)的任務(wù)執(zhí)行條件;若沒有,則開始執(zhí)行該任務(wù)的后繼任務(wù);否則,判斷是否滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件,若滿足,則開始執(zhí)行該任務(wù)的后繼任務(wù);若不滿足,則在滿足該任務(wù)的后繼任務(wù)對應(yīng)的執(zhí)行條件時再開始執(zhí)行該任務(wù)的后繼任務(wù)。
13.如權(quán)利要求11或12所述的系統(tǒng),其特征在于 所述總控任務(wù)用于在所述調(diào)度系統(tǒng)中創(chuàng)建任務(wù)結(jié)果哈希表,所述任務(wù)結(jié)果哈希表中每條記錄對應(yīng)任務(wù)標(biāo)識和任務(wù)結(jié)果兩個字段; 所述系統(tǒng)中還包括第四裝置,用于當(dāng)一任務(wù)執(zhí)行完成后,將該任務(wù)的任務(wù)標(biāo)識和任務(wù)結(jié)果添加到所述任務(wù)結(jié)果哈希表中;所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)是否均已執(zhí)行完成,具體包括 所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄。
14.如權(quán)利要求13所述的系統(tǒng),其特征在干 所述第二裝置用于根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄,具體包括 所述第二裝置用于在獲取到所述任務(wù)結(jié)果哈希表的同步鎖后,再根據(jù)所述第二對應(yīng)關(guān)系判斷該任務(wù)的后繼任務(wù)的所有前驅(qū)任務(wù)在所述任務(wù)結(jié)果哈希表中是否保存有記錄;在查找完成后,釋放所述同步鎖。
15.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括 第五裝置,用于當(dāng)收到用戶發(fā)來的暫停命令或停止命令后,保存所述任務(wù)結(jié)果哈希表; 第六裝置,用于當(dāng)收到用戶發(fā)來的恢復(fù)命令時,重新調(diào)度所述總控任務(wù); 所述總控任務(wù)用于根據(jù)所述任務(wù)結(jié)果哈希表中的記錄,重新調(diào)度所述任務(wù)結(jié)果哈希表中記錄的任務(wù)的未執(zhí)行過的后繼任務(wù)。
16.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括 所述總控任務(wù)還用于在所述調(diào)度系統(tǒng)中創(chuàng)建線程池; 所述開始執(zhí)行該任務(wù)的后繼任務(wù),具體包括所述總控任務(wù)用于將該任務(wù)的后繼任務(wù)放入所述線程池中進(jìn)行處理。
全文摘要
一種多任務(wù)并發(fā)調(diào)度方法及系統(tǒng),所述方法應(yīng)用于可運(yùn)行至少兩個并行任務(wù)的調(diào)度系統(tǒng)中,包括根據(jù)調(diào)度系統(tǒng)中各任務(wù)之間的關(guān)聯(lián)關(guān)系,對于存在后繼任務(wù)的每一任務(wù),記錄該任務(wù)與該任務(wù)的后繼任務(wù)之間的第一對應(yīng)關(guān)系;調(diào)度系統(tǒng)中設(shè)有總控任務(wù),該總控任務(wù)的后繼任務(wù)被設(shè)置為所述各任務(wù)中不存在前驅(qū)任務(wù)的任務(wù);所述總控任務(wù)被調(diào)度后,并發(fā)調(diào)度所述總控任務(wù)的所有后繼任務(wù);對于所述各任務(wù)中的每一任務(wù),在該任務(wù)執(zhí)行完成后,判定該任務(wù)是否存在后繼任務(wù);若存在,則發(fā)起執(zhí)行該任務(wù)的后繼任務(wù)的流程。本發(fā)明提供了一種簡單、高效、通用的多任務(wù)并發(fā)調(diào)度方案,使軟件開發(fā)者可以利用現(xiàn)有的調(diào)度系統(tǒng),輕松實現(xiàn)具有關(guān)聯(lián)關(guān)系的多任務(wù)并發(fā)調(diào)度與控制。
文檔編號G06F9/38GK102681894SQ20111005625
公開日2012年9月19日 申請日期2011年3月9日 優(yōu)先權(quán)日2011年3月9日
發(fā)明者張毅 申請人:中興通訊股份有限公司