專利名稱:一種容錯保序的事件調(diào)度方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信領(lǐng)域,特別是在一種數(shù)據(jù)通信設(shè)備中,設(shè)備軟件實(shí)現(xiàn)事件調(diào)度的容錯及保序的方法及裝置。
背景技術(shù):
數(shù)據(jù)通信設(shè)備的可靠性是衡量設(shè)備質(zhì)量的關(guān)鍵因素之一。數(shù)據(jù)通信設(shè)備的高可靠性主要通過硬件備份、軟件備份、軟件容錯幾個方面來實(shí)現(xiàn)。運(yùn)行于數(shù)據(jù)通信設(shè)備上的軟件必須具有容錯能力,保證軟件最終執(zhí)行結(jié)果與預(yù)期一致,這樣才能提升整個設(shè)備的可靠性。運(yùn)行于數(shù)據(jù)通信設(shè)備中的軟件需要處理多種類別的事件,這些事件一般具有相關(guān)性和時序性,同時在執(zhí)行這些事件的過程中無法避免執(zhí)行失敗的情況出現(xiàn)。所以軟件實(shí)現(xiàn)事件調(diào)度時必須考慮容錯問題、時序問題和執(zhí)行效率問題。為了軟件最終的運(yùn)行結(jié)果的正確性,并最終提高數(shù)據(jù)通信設(shè)備的可靠性,軟件內(nèi)部需要實(shí)現(xiàn)一種容錯的、保證時序的事件調(diào)度方法,同時必須考慮此方法的執(zhí)行效率?,F(xiàn)有技術(shù)中較多的實(shí)現(xiàn)方式是對容錯性問題采用重試的方法處理,對時序性問題采用逐個處理的方式,將兩者有效結(jié)合并考慮執(zhí)行效率的方法較少。
發(fā)明內(nèi)容
本發(fā)明提供了一種容錯保序的事件調(diào)度方法及裝置,解決軟件運(yùn)行過程中事件調(diào)度的容錯性問題和時序性問題,并最終提高數(shù)據(jù)通信設(shè)備的執(zhí)行效率與可靠性。本發(fā)明實(shí)施例提供的一種容錯保序的事件調(diào)度裝置,包括請求隊(duì)列模塊、結(jié)果隊(duì)列模塊、阻塞隊(duì)列模塊、等待隊(duì)列模塊、錯誤隊(duì)列模塊和事件調(diào)度任務(wù)模塊,所述請求隊(duì)列模塊,用于`以事件結(jié)點(diǎn)的形式存儲外部任務(wù)發(fā)起的待處理事件;所述結(jié)果隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部異步返回的事件處理結(jié)果;所述阻塞隊(duì)列模塊,用于存儲由于時序問題必須等待前序事件處理完成的事件結(jié)
占.
所述等待隊(duì)列模塊,用于存儲需要等待外部異步返回結(jié)果的事件結(jié)點(diǎn);所述錯誤隊(duì)列模塊,用于存儲執(zhí)行失敗的事件結(jié)點(diǎn);所述事件調(diào)度任務(wù)模塊,用于從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊;所述事件調(diào)度任務(wù)模塊,還用于從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列I吳塊。較佳地,所述事件調(diào)度任務(wù)模塊,還用于周期性地從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。較佳地,該裝置進(jìn)一步包括空閑隊(duì)列模塊,用于預(yù)先分配固定數(shù)量的事件結(jié)點(diǎn);當(dāng)需求超過預(yù)分配事件結(jié)點(diǎn)數(shù)量時,從內(nèi)存空間分配新的事件結(jié)點(diǎn)到空閑隊(duì)列模塊;當(dāng)空閑隊(duì)列模塊中事件結(jié)點(diǎn)數(shù)大于預(yù)先分配的固定數(shù)量以及需求的事件結(jié)點(diǎn)數(shù)量時,則將多余的事件結(jié)點(diǎn)釋放給內(nèi)存空間;所述請求隊(duì)列模塊用于在事件請求發(fā)起時,接收來自空閑隊(duì)列模塊的分配事件結(jié)
占.
所述結(jié)果隊(duì)列模塊用于當(dāng)外部異步返回的事件處理結(jié)果時,接收來自空閑隊(duì)列的分配事件結(jié)點(diǎn);還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述事件處理結(jié)果對應(yīng)的事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊;所述等待隊(duì)列模塊還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述等待事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊。較佳地,所述裝置位于數(shù)據(jù)通信設(shè)備中。本發(fā)明實(shí)施例還提供一種容錯保序的事件調(diào)度方法,該方法通過前述裝置實(shí)現(xiàn),包括如下步驟:Al、從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊;B1、從結(jié)果 隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列模塊;Cl、判斷錯誤隊(duì)列處理定時器是否超時,若是,執(zhí)行步驟D1,否則結(jié)束本流程;D1、從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。較佳地,步驟Al所述判斷是否有沖突事件未執(zhí)行完包括:AU、判斷等待隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是,轉(zhuǎn)至步驟A14,否則執(zhí)行步驟 A12 ;A12、判斷錯誤隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是執(zhí)行步驟d,否則執(zhí)行步驟A13 ;A13、返回請求事件結(jié)點(diǎn)可執(zhí)行。A14、返回請求事件結(jié)點(diǎn)不可執(zhí)行。本發(fā)明實(shí)施例還提供另一種容錯保序的事件調(diào)度方法,該方法通過前述裝置實(shí)現(xiàn),包括如下步驟:A2、從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列模塊;B2、從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊;C2、判斷錯誤隊(duì)列處理定時器是否超時,若是,執(zhí)行步驟D2,否則結(jié)束本流程;D2、從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。較佳地,步驟B2所述判斷是否有沖突事件未執(zhí)行完包括:B21、判斷等待隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是,轉(zhuǎn)至步驟B24,否則執(zhí)行步驟 B22 ;B22、判斷錯誤隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是執(zhí)行步驟B24,否則執(zhí)行步驟B23 ;B23、返回請求事件結(jié)點(diǎn)可執(zhí)行。B24、返回請求事件結(jié)點(diǎn)不可執(zhí)行。從以上技術(shù)方案可以看出,所有事件被存儲在隊(duì)列中,進(jìn)行異步調(diào)度處理;事件被處理前先檢查是否有相關(guān)事件還未正確執(zhí)行完成,若存在未正確執(zhí)行完成的事件則需要將當(dāng)前請求執(zhí)行的事件入隊(duì)到等待隊(duì)列,此檢查用于保證執(zhí)行時序正確;若事件處理結(jié)果為失敗時,事件需要入隊(duì)到·錯誤隊(duì)列中等待重試,用于保證執(zhí)行結(jié)果與預(yù)期一致。本發(fā)明方案可以提高數(shù)據(jù)通信設(shè)備的執(zhí)行效率與可靠性。
圖1為本發(fā)明實(shí)施例的事件結(jié)點(diǎn)隊(duì)列遷移圖;圖2為本發(fā)明實(shí)施例的事件調(diào)度邏輯圖;圖3為本發(fā)明實(shí)施例的事件調(diào)度算法的流程圖;圖4為本發(fā)明實(shí)施例的事件沖突檢測的流程圖。
具體實(shí)施例方式本發(fā)明提出的事件調(diào)度系統(tǒng)需要包含由六個隊(duì)列構(gòu)成的事件存儲數(shù)據(jù)結(jié)構(gòu)和相應(yīng)的事件隊(duì)列調(diào)度算法。事件存儲的六個隊(duì)列分別是:請求隊(duì)列、阻塞隊(duì)列、等待隊(duì)列、結(jié)果隊(duì)列、錯誤隊(duì)列和空閑隊(duì)列。事件隊(duì)列的調(diào)度算法思想是:單任務(wù)輪詢請求隊(duì)列、結(jié)果隊(duì)列、錯誤隊(duì)列,將隊(duì)列中的事件出隊(duì)和執(zhí)行,輪詢處理的優(yōu)先級次序?yàn)榻Y(jié)果隊(duì)列、請求隊(duì)列、錯誤隊(duì)列。其余三個隊(duì)列作為輔助隊(duì)列,不需要進(jìn)行事件輪詢處理。本發(fā)明提供了一種實(shí)現(xiàn)事件處理過程中容錯和保證時序的方法,該方法包括以下步驟:所有事件被存儲在隊(duì)列中,進(jìn)行異步調(diào)度處理;事件被處理前先檢查是否有相關(guān)事件還未正確執(zhí)行完成,若存在未正確執(zhí)行完成的事件則需要將當(dāng)前請求執(zhí)行的事件入隊(duì)到等待隊(duì)列,此檢查用于保證執(zhí)行時序正確;若事件處理結(jié)果為失敗時,事件需要入隊(duì)到錯誤隊(duì)列中等待重試,用于保證執(zhí)行結(jié)果與預(yù)期一致。
為使本發(fā)明技術(shù)方案的原理、特點(diǎn)以及技術(shù)效果更加清楚,以下通過具體實(shí)施例對本發(fā)明方案進(jìn)行詳細(xì)說明。本發(fā)明提出的事件調(diào)度方案包括事件的存儲數(shù)據(jù)結(jié)構(gòu)和調(diào)度算法。事件的存儲結(jié)構(gòu)以六個事件隊(duì)列為基礎(chǔ),六個事件隊(duì)列的詳細(xì)信息如下:請求隊(duì)列:用于存儲外部任務(wù)發(fā)起的事件處理請求,以事件結(jié)點(diǎn)的形式存儲。阻塞隊(duì)列:用于存儲由于時序問題必須等待前序事件處理完成的事件結(jié)點(diǎn),解決時序性問題。等待隊(duì)列:用于存儲需要等待外部異步返回結(jié)果的事件結(jié)點(diǎn),解決并發(fā)性問題。結(jié)果隊(duì)列:用于存儲外部模塊異步返回的事件處理結(jié)果,解決并發(fā)性問題。錯誤隊(duì)列:用于存儲執(zhí)行失敗的事件結(jié)點(diǎn),解決容錯性問題??臻e隊(duì)列:用于分配和回收事件結(jié)點(diǎn),該隊(duì)列預(yù)分配了事件結(jié)點(diǎn),提高了分配和釋放的效率??臻e隊(duì)列為可選隊(duì)列。圖1為事件結(jié)點(diǎn)在隊(duì)列間的遷移圖,事件結(jié)點(diǎn)遷移的原因如下所述:1:事件請求發(fā)起時,從空閑隊(duì)列101中分配事件結(jié)點(diǎn),入隊(duì)到請求隊(duì)列102。2:請求隊(duì)列事件執(zhí)行并同步返回成功。從請求隊(duì)列102出隊(duì),入隊(duì)等待隊(duì)列103。3:請求隊(duì)列事件執(zhí)行并同步返回失敗。從請求隊(duì)列102出隊(duì),入隊(duì)錯誤隊(duì)列104。4:結(jié)果隊(duì)列事件出隊(duì)匹配等待隊(duì)列,且事件結(jié)果失敗。從等待隊(duì)列103出隊(duì),入隊(duì)錯誤隊(duì)列104。5:錯誤隊(duì)列事件執(zhí)行并同步返回成功。從錯誤隊(duì)列105出隊(duì),入隊(duì)等待隊(duì)列103。6:結(jié)果隊(duì)列事件出隊(duì)匹配等待隊(duì)列,且事件結(jié)果成功。從等待隊(duì)列103出隊(duì),釋放回空閑隊(duì)列101。7:異步返回事件處理結(jié)果時,從空閑隊(duì)列101中分配事件結(jié)點(diǎn),入隊(duì)到結(jié)果隊(duì)列105。8:結(jié)果隊(duì)列事件執(zhí)行,從結(jié)果隊(duì)列105出隊(duì),釋放回空閑隊(duì)列101。9:空閑隊(duì)列預(yù)先分配固定數(shù)量的事件結(jié)點(diǎn)。當(dāng)需求超過預(yù)分配事件結(jié)點(diǎn)數(shù)量時,從內(nèi)存空間106分配;當(dāng)空閑隊(duì)列中事件結(jié)點(diǎn)數(shù)大于預(yù)先分配的固定數(shù)量以及需求的事件結(jié)點(diǎn)數(shù)量時,則將多余的事件結(jié)點(diǎn)釋放給內(nèi)存空間106。10:阻塞隊(duì)列中的事件結(jié)點(diǎn),被喚醒后執(zhí)行,同步返回成功,從阻塞隊(duì)列107進(jìn)入等待隊(duì)列103。11:阻塞隊(duì)列107中的事件結(jié)點(diǎn),被喚醒后執(zhí)行,同步返回失敗,進(jìn)入錯誤隊(duì)列104。12:請求隊(duì)列102出隊(duì)執(zhí)行時,沖突處理后被放入阻塞隊(duì)列107,等待喚醒。圖2為本發(fā)明實(shí)施例的事件調(diào)度邏輯圖,整個事件調(diào)度的邏輯機(jī)制如下所述:201:外部任務(wù)發(fā)起異步處理請求,將請求事件放入請求隊(duì)列102。202:外部任務(wù)異步處理完成返回結(jié)果,將結(jié)果事件放入結(jié)果隊(duì)列106。203:事件調(diào)度任務(wù)從請求隊(duì)列102中獲取待處理事件,判斷有沖突事件未執(zhí)行完,則將待處理事件放入阻塞隊(duì)列101,等待無沖突時執(zhí)行。204:事件調(diào)度任務(wù)從請求隊(duì)列102中獲取待處理事件,如果可以執(zhí)行且同步返回成功,則將待處理事件放入 等待隊(duì)列104,等待異步處理結(jié)果。
205:事件調(diào)度任務(wù)從請求隊(duì)列102中獲取待處理事件,如果可以執(zhí)行且同步返回失敗,則將待處理事件放入錯誤隊(duì)列105,等待重試執(zhí)行。206:事件調(diào)度任務(wù)從結(jié)果隊(duì)列106中獲取事件處理結(jié)果,并從等待隊(duì)列104中取出相匹配的等待事件結(jié)點(diǎn),如果結(jié)果為成功,則將阻塞隊(duì)列101中相沖突的事件執(zhí)行。207:事件調(diào)度任務(wù)從結(jié)果隊(duì)列106中獲取事件處理結(jié)果,并從等待隊(duì)列104中取出相匹配的等待事件結(jié)點(diǎn),如果結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列105,等待重試執(zhí)行。208:事件調(diào)度任務(wù)周期性從錯誤隊(duì)列105中獲取待處理事件,按與請求事件同樣的方式執(zhí)行。圖3為事件隊(duì)列調(diào)度方法的流程圖,包括:步驟301:結(jié)果隊(duì)列處理。具體包括:從結(jié)果隊(duì)列中獲取事件處理結(jié)果,并從等待隊(duì)列中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列。步驟302:請求隊(duì)列處理。具體包括: B2、從請求隊(duì)列中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列,否則將待處理事件放入錯誤隊(duì)列。步驟303:判斷錯誤隊(duì)列處理定時器是否超時,若是,執(zhí)行步驟304,否則結(jié)束本流程。步驟304:錯誤隊(duì)列處理。具體包括:從錯誤隊(duì)列中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列,否則將待處理事件放入錯誤隊(duì)列。其中,步驟301請求隊(duì)列處理和步驟302結(jié)果隊(duì)列的處理順序可根據(jù)系統(tǒng)的實(shí)際需求進(jìn)行調(diào)換。結(jié)果隊(duì)列先處理的優(yōu)勢是事件結(jié)點(diǎn)堆積少,請求隊(duì)列執(zhí)行時可快速查找沖突事件;請求隊(duì)列先處理的優(yōu)勢是事件并發(fā)性更高。圖4為事件沖突檢測的邏輯流程圖,包括:步驟401:判斷等待隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是,轉(zhuǎn)至步驟404,否則執(zhí)行步驟402。步驟402:判斷錯誤隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是執(zhí)行步驟404,否則執(zhí)行步驟403。步驟403:返回請求事件結(jié)點(diǎn)可執(zhí)行。步驟404:返回請求事件結(jié)點(diǎn)不可執(zhí)行。事件沖突檢測的目的是保證相關(guān)聯(lián)事件的執(zhí)行時序性,相關(guān)聯(lián)事件只有一個處于執(zhí)行狀態(tài)(即對于相關(guān)聯(lián)事件只有一個事件結(jié)點(diǎn)是處于等待隊(duì)列或錯誤隊(duì)列),當(dāng)處于執(zhí)行狀態(tài)的事件結(jié)點(diǎn)執(zhí)行完成后,再喚醒被阻塞的關(guān)聯(lián)事件結(jié)點(diǎn)。本發(fā)明實(shí)施例還提供了一種容錯保序的事件調(diào)度裝置,包括請求隊(duì)列模塊、結(jié)果隊(duì)列模塊、阻塞隊(duì)列模塊、等待隊(duì)列模塊、錯誤隊(duì)列模塊和事件調(diào)度任務(wù)模塊,所述請求隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部任務(wù)發(fā)起的待處理事件;所述結(jié)果隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部異步返回的事件處理結(jié)果;所述阻塞隊(duì)列模塊,用于存儲由于時序問題必須等待前序事件處理完成的事件結(jié)
占.
所述等待隊(duì)列模塊,用于存儲需要等待外部異步返回結(jié)果的事件結(jié)點(diǎn);所述錯誤隊(duì)列模塊用于存儲執(zhí)行失敗的事件結(jié)點(diǎn);所述事件調(diào)度任務(wù)模塊用于從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊;所述事件調(diào) 度任務(wù)模塊還用于從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列豐旲塊;所述事件調(diào)度任務(wù)模塊還用于周期性地從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。較佳地,該裝置進(jìn)一步包括空閑隊(duì)列模塊,用于預(yù)先分配固定數(shù)量的事件結(jié)點(diǎn)。當(dāng)需求超過預(yù)分配事件結(jié)點(diǎn)數(shù)量時,從內(nèi)存空間分配新的事件結(jié)點(diǎn)到空閑隊(duì)列模塊;當(dāng)空閑隊(duì)列模塊中事件結(jié)點(diǎn)數(shù)大于預(yù)先分配的固定數(shù)量以及需求的事件結(jié)點(diǎn)數(shù)量時,則將多余的事件結(jié)點(diǎn)釋放給內(nèi)存空間;所述請求隊(duì)列模塊用于在事件請求發(fā)起時,接收來自空閑隊(duì)列模塊的分配事件結(jié)
占.
所述結(jié)果隊(duì)列模塊用于當(dāng)外部異步返回的事件處理結(jié)果時,接收來自空閑隊(duì)列的分配事件結(jié)點(diǎn);還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述事件處理結(jié)果對應(yīng)的事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊;所述等待隊(duì)列模塊還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述等待事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊。較佳地,所述裝置位于數(shù)據(jù)通信設(shè)備中。本發(fā)明提出的事件調(diào)度方法及裝置具有以下有益效果:1、通過相關(guān)事件未執(zhí)行完之前進(jìn)行等待的方法,保證事件調(diào)度執(zhí)行的時序性;2、通過錯誤重試的方法,保證事件調(diào)度執(zhí)行的正確性;3、在單任務(wù)調(diào)度執(zhí)行的情況下,只有相關(guān)事件被阻塞,非相關(guān)事件可以并發(fā)執(zhí)行,在保證容錯的前提下盡可能的提高了軟件的處理性能。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi) ,所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種容錯保序的事件調(diào)度裝置,其特征在于,包括請求隊(duì)列模塊、結(jié)果隊(duì)列模塊、阻塞隊(duì)列模塊、等待隊(duì)列模塊、錯誤隊(duì)列模塊和事件調(diào)度任務(wù)模塊, 所述請求隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部任務(wù)發(fā)起的待處理事件; 所述結(jié)果隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部異步返回的事件處理結(jié)果; 所述阻塞隊(duì)列模塊,用于存儲由于時序問題必須等待前序事件處理完成的事件結(jié)點(diǎn); 所述等待隊(duì)列模塊,用于存儲需要等待外部異步返回結(jié)果的事件結(jié)點(diǎn); 所述錯誤隊(duì)列模塊,用于存儲執(zhí)行失敗的事件結(jié)點(diǎn); 所述事件調(diào)度任務(wù)模塊,用于從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊; 所述事件調(diào)度任務(wù)模塊,還用于從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列模塊。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述事件調(diào)度任務(wù)模塊,還用于周期性地從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。
3.根據(jù)權(quán)利要求1所述的裝置,其特征在于,該裝置進(jìn)一步包括空閑隊(duì)列模塊,用于預(yù)先分配固定數(shù)量的事件結(jié)點(diǎn);當(dāng)需求超過預(yù)分配事件結(jié)點(diǎn)數(shù)量時,從內(nèi)存空間分配新的事件結(jié)點(diǎn)到空閑隊(duì)列模塊;當(dāng)空閑隊(duì)列模塊中事件結(jié)點(diǎn)數(shù)大于預(yù)先分配的固定數(shù)量以及需求的事件結(jié)點(diǎn)數(shù)量時,則將多余的事件結(jié)點(diǎn)釋放給內(nèi)存空間;所述請求隊(duì)列模塊用于在事件請求發(fā)起時,接收來自空閑隊(duì)列模塊的分配事件結(jié)點(diǎn);所述結(jié)果隊(duì)列模塊用于當(dāng)外部異步返回的事件處理結(jié)果時,接收來自空閑隊(duì)列的分配事件結(jié)點(diǎn);還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述事件處理結(jié)果對應(yīng)的事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊; 所述等待隊(duì)列模塊還用于在所述事件調(diào)度任務(wù)模塊從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功時,將所述等待事件結(jié)點(diǎn)釋放回空閑隊(duì)列模塊。
4.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的裝置,其特征在于,所述裝置位于數(shù)據(jù)通信設(shè)備中。
5.一種容錯保序的事件調(diào)度方法,其特征在于,該方法通過如權(quán)利要求1所述的裝置實(shí)現(xiàn),包括如下步驟: Al、從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊; B1、從結(jié)果隊(duì)列模塊 中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列模塊; Cl、判斷錯誤隊(duì)列處理定時器是否超時,若是,執(zhí)行步驟D1,否則結(jié)束本流程; D1、從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,步驟Al所述判斷是否有沖突事件未執(zhí)行完包括: AU、判斷等待隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是,轉(zhuǎn)至步驟A14,否則執(zhí)行步驟A12 ; A12、判斷錯誤隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是執(zhí)行步驟d,否則執(zhí)行步驟A13; A13、返回請求事件結(jié)點(diǎn)可執(zhí)行。
A14、返回請求事件結(jié)點(diǎn)不可執(zhí)行。
7.—種容錯保序的事件調(diào)度方法,其特征在于,該方法通過如權(quán)利要求1所述的裝置實(shí)現(xiàn),包括如下步驟: A2、從結(jié)果隊(duì)列模塊中獲取事件處理結(jié)果,并從等待隊(duì)列模塊中取出相匹配的等待事件結(jié)點(diǎn),如果所述事件處理結(jié)果為成功,則執(zhí)行阻塞隊(duì)列模塊中相沖突的事件結(jié)點(diǎn);如果所述事件處理結(jié)果為失敗,則將所述待處理事件放入錯誤隊(duì)列模塊; B2、從請求隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊; C2、判斷錯誤隊(duì)列處理定時器是否超時,若是,執(zhí)行步驟D2,否則結(jié)束本流程; D2、從錯誤隊(duì)列模塊中獲取待處理事件,判斷是否有沖突事件未執(zhí)行完,若是,將待處理事件放入阻塞隊(duì)列模塊等待無沖突時執(zhí)行;否則判斷是否同步返回成功,若是,則將待處理事件放入等待隊(duì)列模塊,否則將待處理事件放入錯誤隊(duì)列模塊。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟B2所述判斷是否有沖突事件未執(zhí)行完包括: B21、判斷等待隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是,轉(zhuǎn)至步驟B24,否則執(zhí)行步驟B22 ; B22、判斷錯誤隊(duì)列中是否存在相關(guān)聯(lián)事件結(jié)點(diǎn),若是執(zhí)行步驟B24,否則執(zhí)行步驟B23 ; B23、返回請求事件結(jié)點(diǎn)可執(zhí)行。
B24、返回請求事件結(jié)點(diǎn)不可執(zhí)行。
全文摘要
本發(fā)明提供了一種容錯保序的事件調(diào)度裝置,包括請求隊(duì)列模塊、結(jié)果隊(duì)列模塊、阻塞隊(duì)列模塊、等待隊(duì)列模塊、錯誤隊(duì)列模塊和事件調(diào)度任務(wù)模塊,所述請求隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部任務(wù)發(fā)起的待處理事件;所述結(jié)果隊(duì)列模塊,用于以事件結(jié)點(diǎn)的形式存儲外部異步返回的事件處理結(jié)果;所述阻塞隊(duì)列模塊,用于存儲由于時序問題必須等待前序事件處理完成的事件結(jié)點(diǎn);所述等待隊(duì)列模塊,用于存儲需要等待外部異步返回結(jié)果的事件結(jié)點(diǎn);所述錯誤隊(duì)列模塊,用于存儲執(zhí)行失敗的事件結(jié)點(diǎn);所述事件調(diào)度任務(wù)模塊,用于從對事件結(jié)點(diǎn)進(jìn)行調(diào)度。本發(fā)明可以解決軟件運(yùn)行過程中事件調(diào)度的容錯性問題和時序性問題,并提高數(shù)據(jù)通信設(shè)備的執(zhí)行效率與可靠性。
文檔編號G06F9/46GK103246548SQ20121002298
公開日2013年8月14日 申請日期2012年2月2日 優(yōu)先權(quán)日2012年2月2日
發(fā)明者劉可立, 趙春剛, 吳迪 申請人:邁普通信技術(shù)股份有限公司