專利名稱:一種控制并發(fā)錯誤的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種控制并發(fā)錯誤的方法及 裝置。
背景技術(shù):
分布式對象(Distributed Object)技術(shù)為網(wǎng)絡(luò)計算平臺上軟件的開發(fā)提供 了強有力的解決方案,目前,分布式對象技術(shù)已經(jīng)成為建立服務(wù)應(yīng)用框架和 軟件構(gòu)件的核心技術(shù)。在分布式對象計算(Distributed Object Computing, DOC ) 環(huán)境中,網(wǎng)絡(luò)中的每個分布式對象,在作為服務(wù)提供者時,彼此是相互獨立 的,因此,主叫應(yīng)用端(User Application, UA)在調(diào)用服務(wù)時,由不同的提
供者提供的應(yīng)用服務(wù)(程序)可能會被同時觸發(fā)。
對于原本需要按順序被觸發(fā)才能獲得正確結(jié)果的多個應(yīng)用服務(wù),如果被
同時觸發(fā),就可能會引起并發(fā)錯誤。例如應(yīng)用服務(wù)P1的作用是將變量x的
值自加5,即x=x+5;應(yīng)用服務(wù)P2的作用是令變量y的值等于變量x的值
加10,即y=x+10。正常情況下,我們希望P1、 P2順序被觸發(fā),假設(shè)x的
初始值為1,那么順序觸發(fā)P1、 P2后,其結(jié)果應(yīng)該是x=6、 y=16;
而在分布式環(huán)境下,PI和P2可能出現(xiàn)同時被觸發(fā)(或者P2在PI觸發(fā)
后立即被觸發(fā)),PI被觸發(fā)后得到的結(jié)果是x二6;而P2被觸發(fā)時,其讀取的
變量x值尚未被Pl所更新,依然是x^,因此P2被觸發(fā)后得到的結(jié)果將是
是y:ll。
可見,如果不同的應(yīng)用服務(wù),其處理的對象相同或部分相同(例如上述 的P1和P2,其處理對象都涉及變量x),那么同時被觸發(fā)就會引起并發(fā)錯誤。 在現(xiàn)有技術(shù)中, 一種控制并發(fā)錯誤的方案是,當某個應(yīng)用服務(wù)被觸發(fā)時,對 其要處理的對象加排它鎖,禁止其他應(yīng)用服務(wù)對這些對象的訪問。例如在上 面的例子中,Pl在執(zhí)行時,將對變量x加排它鎖,這樣如果在P1執(zhí)行過程中 觸發(fā)了 P2, P2在試圖讀取變量x時會收到失敗響應(yīng),并等待x被釋放后再繼續(xù)執(zhí)行,從而保證最終結(jié)果的正確性。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)有技術(shù)中至少存在如下問題對數(shù) 據(jù)加排它鎖的方法可以從一定程度上避免并發(fā)錯誤,但是當應(yīng)用服務(wù)需要處 理的數(shù)據(jù)量比較大,而且并發(fā)量較大時,將會導(dǎo)致經(jīng)常性的執(zhí)行失敗,從而 對整個系統(tǒng)的穩(wěn)定性和處理效率造成影響。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實施例提供了一種控制并發(fā)錯誤的方法及裝置,以解 決現(xiàn)有的控制并發(fā)錯誤的方案所導(dǎo)致的系統(tǒng)穩(wěn)定性和處理效率低下的問題, 技術(shù)方案如下
一種控制并發(fā)镅-誤的方法,包括
為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識;
將添加觸發(fā)標識后的應(yīng)用服務(wù)加入任務(wù)隊列;
當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù)。
一種應(yīng)用服務(wù)管理器,包括
觸發(fā)標識添加單元,用于為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識; 任務(wù)添加單元,用于將所述封裝單元封裝后的應(yīng)用服務(wù)加入任務(wù)隊列; 觸發(fā)單元,用于當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù) 隊列中的應(yīng)用服務(wù)。
以上所提供的技術(shù)方案,通過應(yīng)用服務(wù)管理器,定義任務(wù)隊列表,將原 本直接調(diào)用應(yīng)用服務(wù)的形式改為向任務(wù)隊列中添加一項任務(wù),服務(wù)管理中心 根據(jù)任務(wù)先后順序,依次調(diào)用相應(yīng)的服務(wù),不僅能夠避免程序并發(fā)操作數(shù)據(jù) 所引起的錯誤,而且不會導(dǎo)致應(yīng)用服務(wù)經(jīng)常性的執(zhí)行失敗,有效地提高了系 統(tǒng)的穩(wěn)定性和處理效率。
圖1為實現(xiàn)本發(fā)明方法具體實施例一的流程圖; 圖2為實現(xiàn)本發(fā)明方法具體實施例二的流程圖; 圖3為本發(fā)明實施例應(yīng)用服務(wù)管理器的結(jié)構(gòu)示意圖;圖4為本發(fā)明實施例應(yīng)用服務(wù)管理器的另一種結(jié)構(gòu)示意圖。
具體實施例方式
首先對本發(fā)明實施例的控制并發(fā)錯誤的方法進行說明,包括 為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識; 將添加觸發(fā)標識后的應(yīng)用服務(wù)加入任務(wù)隊列;
當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖對本發(fā) 明作進一步的詳細說明。 實施例一
圖1所示為本發(fā)明實施例的一種控制并發(fā)錯誤的方法流程圖,包括以下 步驟
SlOl,當主叫應(yīng)用端UA調(diào)用應(yīng)用服務(wù)時,對所調(diào)用的應(yīng)用服務(wù)進行封 裝處理,添加觸發(fā)標識。
在本發(fā)明技術(shù)方案中,應(yīng)用服務(wù)被調(diào)用后,不會立刻執(zhí)行,而是先送至 UA本地的AM (Application Manager,應(yīng)用服務(wù)管理器)進行處理。為了令 AM能夠?qū)?yīng)用服務(wù)進行正確調(diào)度,需要首先對應(yīng)用服務(wù)進行封裝,封裝的主 要內(nèi)容包括為所述應(yīng)用服務(wù)添加觸發(fā)標識。
我們可以為應(yīng)用服務(wù)添加順序觸發(fā)標識,使得AM能夠按照一定的順序 對應(yīng)用服務(wù)進行調(diào)度。順序觸發(fā)標識可以由1開始,并由系統(tǒng)自動累加生成。 例如,在前面所述的例子中,我們可以為Pl添加標識"1",為P2添加標識 "2",用以標明兩個應(yīng)用服務(wù)的觸發(fā)順序。
S102,將封裝后的應(yīng)用服務(wù)加入任務(wù)隊列。
一般來說,我們將封裝后的應(yīng)用服務(wù)按照所添加標識的序號,加入任務(wù) 隊列。為了便于管理,我們可以構(gòu)建一張任務(wù)隊列表。任務(wù)隊列表中的每一 條記錄都代表一個UA所調(diào)用的應(yīng)用服務(wù),除了標識序號之外,每條記錄中 還應(yīng)該包括一個服務(wù)調(diào)用標識字段,字段類型為布爾型,用于標識該應(yīng)用服務(wù)是否已成功觸發(fā)并正確執(zhí)行。
此外,在每條記錄中,還可以包含以下字^殳
1) 任務(wù)編碼,類型為數(shù)字,AM才艮據(jù)編碼決定調(diào)用哪個功能
2) 參數(shù)列表,類型為字符,為應(yīng)用服務(wù)在處理任務(wù)時需要的參數(shù)。
3) 建立時間,類型為日期,用于記錄任務(wù)建立時間。
4) 處理時間,類型為日期,用于記錄任務(wù)實際處理時間。
5) 處理用時,類型為數(shù)字,用于記錄處理本次任務(wù)所用時長,單位可以 是毫秒或秒。
6) 任務(wù)處理標志,類型為布爾,用于標識本次任務(wù)是否已處理。
7) 異常記錄,類型為字符,用于記錄處理異常的詳細描述。
S103,當滿足觸發(fā)條件時,按照任務(wù)隊列中的順序,觸發(fā)應(yīng)用服務(wù)。
由于在S101中,我們?yōu)閼?yīng)用服務(wù)添加了時序觸發(fā)條件,因此我們僅需按 照添加標識的序號,依次觸發(fā)應(yīng)用服務(wù),就可以有效避免并發(fā)錯誤。
例如,在前面所述的例子中,AM首先會觸發(fā)任務(wù)列表中標識序號最小且 服務(wù)調(diào)用標識二false的應(yīng)用服務(wù),即Pl,當Pl執(zhí)行完畢后,AM會將P1所 對應(yīng)的服務(wù)調(diào)用標識字段更新為true,然后AM再次觸發(fā)任務(wù)列表中標識序 號最小且服務(wù)調(diào)用標識字段為false的應(yīng)用服務(wù),此時滿足該條件的應(yīng)用服務(wù) 為P2, P2執(zhí)行完畢后,任務(wù)列表中已經(jīng)沒有服務(wù)調(diào)用標識字段為false的應(yīng) 用服務(wù),本次任務(wù)處理完畢。
在上面的實施例中,通過建立一種集中隊列式處理機制,將原本可能并 發(fā)的任務(wù)做了串行化處理,避免了并發(fā)錯誤,由于應(yīng)用服務(wù)是按照AM的調(diào) 度依次被調(diào)用,因此不會出現(xiàn)應(yīng)用服務(wù)執(zhí)行失敗的情況,有效地提高了系統(tǒng) 的穩(wěn)定性和處理效率。
實施例二
在本發(fā)明的優(yōu)選實施例中,服務(wù)管理中心可以通過對應(yīng)用服務(wù)的功能進 行分析,得知哪些應(yīng)用服務(wù)可以并發(fā)執(zhí)行而不會產(chǎn)生錯誤,進一步可以在封 裝處理過程中,為這些應(yīng)用服務(wù)添加事件觸發(fā)條件,使得這些應(yīng)用服務(wù)可以 并行被調(diào)用,從而進一步提供系統(tǒng)的處理效率。以下假設(shè)P1、 P2、 P3、 P4、 P5、 P6為不同的應(yīng)用服務(wù),其對應(yīng)功能如下:
Pl:x=x+5;
P2:y二x+10;
P3:a=x+y;
P4:b=x-y;
P5:c=x/y;
P6:d=a+b+c。
當UA調(diào)用以上服務(wù)時,UA本地的AM除了為Pl-P6添加順序觸發(fā)標識 (即標識序號)外,還會對每個應(yīng)用服務(wù)進行分析(由于PI之前沒有其他應(yīng) 用服務(wù),因此對于PI可以不進行分析),檢查該應(yīng)用服務(wù)的輸入變量是否會 被該應(yīng)用月良務(wù)的前一個應(yīng)用月l務(wù)所更新。例如 對于P2,其輸入變量為x, x會被Pl所更新; 對于P3,其輸入變量為x和y,其中y會被P2所更新; 對于P4,其輸入變量為x和y, x和y都不會^皮P3所更新; 對于P5,其輸入變量為x和y, x和y都不會^皮P4所更新; 對于P6,其輸入變量為a、 b和c,其中c會被P6所更新。 由于P4所用的輸入變量x和y都不會凈皮P3所更新,說明P4可以與P3 同時執(zhí)行,而不會引起并發(fā)錯誤。我們在封裝過程中,可以進一步為P4添加 事件觸發(fā)標識,例如"P3",或者僅是一個布爾值"true",表明P4可以與其 上一個應(yīng)用服務(wù)P3同時#1觸發(fā)。
同理,由于P5所用的輸入變量x和y都不會^皮P4所更新,因此也可以 為P5添加事件觸發(fā)標識,表明P5可以與其上一個應(yīng)用服務(wù)P4同時被調(diào)用。 相應(yīng)的,AM在觸發(fā)一個服務(wù)后,會立即查詢列表中的下一個服務(wù)是否具 有事件觸發(fā)標識,如果有,則立即觸發(fā)下一個服務(wù),無需等待當前服務(wù)執(zhí)行 完畢。在上面所舉的例子中,AM在觸發(fā)P3后,查詢到P4具有事件觸發(fā)標 識,因此可以立即觸發(fā)P4;由于P5也具有事件觸發(fā)標識,因此在觸發(fā)P4后 還會立即觸發(fā)P5。 P6不具有事件觸發(fā)標識,因此不會立即被觸發(fā),待P5執(zhí) 行完畢后,AM會觸發(fā)任務(wù)列表中標識序號最小,且服務(wù)調(diào)用標識字段為false 的應(yīng)用力良務(wù),此時P6滿足該觸發(fā)條件而^皮觸發(fā)。為便于理解,本實施例的方法流程可以參見圖2所示,具體步驟描述如
下
5201, 主叫應(yīng)用端UA調(diào)用應(yīng)用月良務(wù)時,為所調(diào)用的應(yīng)用J良務(wù)添加順序 觸發(fā)標識。
5202, 通過對所調(diào)用的應(yīng)用服務(wù)進行分析,為其添加事件觸發(fā)標識。
5203, 將添加觸發(fā)標識后的應(yīng)用服務(wù)力。入任務(wù)隊列。
S204,當觸發(fā)一個應(yīng)用服務(wù)后,判斷該應(yīng)用服務(wù)的下一個應(yīng)用服務(wù)是否 具有事件觸發(fā)標識,如果是,則執(zhí)行S205,否則執(zhí)行S206. S205,立即觸發(fā)下一個應(yīng)用月良務(wù)。
S206,當該應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順序觸發(fā)標識值最小 且未被觸發(fā)過的應(yīng)用服務(wù)。
應(yīng)用本實施例的方案,由于預(yù)先對每個服務(wù)進行了分析,因此可以在保 證不會產(chǎn)生并發(fā)錯誤的前提下,實現(xiàn)P3、 P4和P5幾乎并行的觸發(fā),從而進 一步提高了系統(tǒng)的整體處理效率。
相應(yīng)于上面的方法實施例,本發(fā)明實施例還提供一種應(yīng)用服務(wù)管理器, 參見圖3所示,包括
觸發(fā)標識添加單元310,用于為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識; 任務(wù)添加單元320,用于將所述封裝單元封裝后的應(yīng)用服務(wù)加入任務(wù)隊
列;
觸發(fā)單元330,用于當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任
務(wù)隊列中的應(yīng)用服務(wù)。
其中,所述觸發(fā)標識添加單元可以為順序觸發(fā)標識添加單元,用于為應(yīng)
用月良務(wù)添加順序觸發(fā)標識;
則所述觸發(fā)單元330,用于當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中
順序觸發(fā)標識值最小且未被觸發(fā)過的應(yīng)用服務(wù)。
參見圖4所示,所述觸發(fā)標識添加單元310可以包括 順序觸發(fā)標識添加子單元311,用于為應(yīng)用力l務(wù)添加順序觸發(fā)標識; 事件觸發(fā)標識添加子單元312,用于對所述應(yīng)用服務(wù)進行分析,如果所述應(yīng)用服務(wù)能夠與該應(yīng)用服務(wù)的前一個應(yīng)用服務(wù)并發(fā)執(zhí)行,則為所述應(yīng)用服務(wù)
添加事件觸發(fā)標識;
則所述觸發(fā)單元330,用于當一個應(yīng)用服務(wù)被觸發(fā)后,檢查任務(wù)隊列中該 應(yīng)用服務(wù)的下一個應(yīng)用服務(wù)是否具有事件觸發(fā)標識,如果有,則觸發(fā)所述下 一個應(yīng)用服務(wù);和,當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順序觸發(fā) 標識值最小且未被觸發(fā)過的應(yīng)用服務(wù)。
對于裝置實施例而言,由于其基本相應(yīng)于方法實施例,所以描述得比較 簡單,相關(guān)之處參見方法實施例的部分說明即可。以上所描述的裝置實施例 僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是
以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要 選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)
人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。
可以理解的是,本發(fā)明可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。 例如個人計算機、服務(wù)器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、 多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設(shè)備、網(wǎng) 絡(luò)PC、小型計算機、大型計算機、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán) 境等等。
以上所述僅是本發(fā)明的具體實施方式
,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普 通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤 飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1、一種控制并發(fā)錯誤的方法,其特征在于,包括為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識;將添加觸發(fā)標識后的應(yīng)用服務(wù)加入任務(wù)隊列;當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述為應(yīng)用服務(wù)添加觸發(fā) 標識,具體實現(xiàn)為為應(yīng)用服務(wù)添加順序觸發(fā)標識。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述當滿足觸發(fā)條件時, 根據(jù)觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù),具體實現(xiàn)為當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順序觸發(fā)標識值最小且未 被觸發(fā)過的應(yīng)用服務(wù)。
4、 根據(jù)權(quán)利要求2所述的方法,其特征在于,在為應(yīng)用服務(wù)添加順序觸 發(fā)標識之后,還包括對所述應(yīng)用服務(wù)進行分析,判斷所述應(yīng)用服務(wù)是否能夠與該應(yīng)用服務(wù)的 前一個應(yīng)用服務(wù)并發(fā)執(zhí)行,如果是,則為所述應(yīng)用服務(wù)添加事件觸發(fā)標識。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述判斷所述應(yīng)用服務(wù)是 否能夠與該應(yīng)用服務(wù)的前一個應(yīng)用服務(wù)并發(fā)執(zhí)行,具體實現(xiàn)為判斷所述應(yīng)用服務(wù)的輸入變量是否會被所述前一個應(yīng)用服務(wù)更新,如果 否,則所述應(yīng)用服務(wù)能夠與該應(yīng)用服務(wù)的前一個應(yīng)用服務(wù)并發(fā)執(zhí)行。
6、 根據(jù)權(quán)利要求4或5所述的方法,其特征在于,所述當滿足觸發(fā)條件 時,根據(jù)觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù),具體實現(xiàn)為當 一個應(yīng)用服務(wù)被觸發(fā)后,檢查任務(wù)隊列中該應(yīng)用服務(wù)的下一個應(yīng)用服 務(wù)是否具有事件觸發(fā)標識,如果有,則觸發(fā)所述下一個應(yīng)用服務(wù);和,當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順序觸發(fā)標識值最小且未 被觸發(fā)過的應(yīng)用服務(wù)。
7、 一種應(yīng)用服務(wù)管理器,其特征在于,包括 觸發(fā)標識添加單元,用于為所調(diào)用的應(yīng)用月l務(wù)添加觸發(fā)標識; 任務(wù)添加單元,用于將所述封裝單元封裝后的應(yīng)用服務(wù)加入任務(wù)隊列; 觸發(fā)單元,用于當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù)。
8、 根據(jù)權(quán)利要求7所述的應(yīng)用服務(wù)管理器,其特征在于,所述觸發(fā)標識 添加單元為順序觸發(fā)標識添加單元,用于為應(yīng)用服務(wù)添加順序觸發(fā)標識;則所述觸發(fā)單元,用于當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順 序觸發(fā)標識值最小且未被觸發(fā)過的應(yīng)用服務(wù)。
9、 根據(jù)權(quán)利要求7所述的應(yīng)用服務(wù)管理器,其特征在于,所述觸發(fā)標識 添加單元包4舌順序觸發(fā)標識添加子單元,用于為應(yīng)用服務(wù)添加順序觸發(fā)標識; 事件觸發(fā)標識添加子單元,用于對所述應(yīng)用服務(wù)進行分析,如果所述應(yīng)用服務(wù)能夠與該應(yīng)用服務(wù)的前一個應(yīng)用服務(wù)并發(fā)執(zhí)行,則為所述應(yīng)用服務(wù)添加事件觸發(fā)標識;則所述觸發(fā)單元,用于當一個應(yīng)用服務(wù)被觸發(fā)后,檢查任務(wù)隊列中該應(yīng) 用服務(wù)的下一個應(yīng)用服務(wù)是否具有事件觸發(fā)標識,如果有,則觸發(fā)所述下一 個應(yīng)用服務(wù);和,當一個應(yīng)用服務(wù)執(zhí)行完畢后,觸發(fā)任務(wù)隊列中順序觸發(fā)標 識值最小且未被觸發(fā)過的應(yīng)用服務(wù)。
全文摘要
本發(fā)明公開了一種控制并發(fā)錯誤的方法及裝置。一種控制并發(fā)錯誤的方法包括為所調(diào)用的應(yīng)用服務(wù)添加觸發(fā)標識;將添加觸發(fā)標識后的應(yīng)用服務(wù)加入任務(wù)隊列;當滿足觸發(fā)條件時,根據(jù)所述觸發(fā)標識,觸發(fā)所述任務(wù)隊列中的應(yīng)用服務(wù)。應(yīng)用本發(fā)明技術(shù)方案,不僅能夠避免程序并發(fā)操作數(shù)據(jù)所引起的錯誤,而且不會導(dǎo)致應(yīng)用服務(wù)經(jīng)常性的執(zhí)行失敗,有效地提高了系統(tǒng)的穩(wěn)定性和處理效率。
文檔編號H04L29/08GK101442549SQ20081018514
公開日2009年5月27日 申請日期2008年12月11日 優(yōu)先權(quán)日2008年12月11日
發(fā)明者王成明 申請人:金蝶軟件(中國)有限公司