本發(fā)明涉及流程控制技術領域,特別是涉及一種流程控制方法及裝置、計算機可讀存儲介質、終端。
背景技術:
為降低對國外技術的依賴度,目前從硬件到軟件,從底層操作系統(tǒng)到上層各應用,國產(chǎn)化的呼聲日漸高漲;而對于對外依賴度較高的金融行業(yè),國產(chǎn)化的需求及趨勢也越來越明顯。為了適用于國產(chǎn)化操作系統(tǒng),金融行業(yè)的諸多應用需要做向國產(chǎn)化系統(tǒng)遷移的工作。
一切應用的實際本質說到底都是流程控制,與編程語言類似,應用的流程也分為順序流程、循環(huán)流程和分支流程。而對于流程的流轉,分支流程是流程控制中最復雜且最具神秘感的流程控制方式。根據(jù)所對應提供的功能多少,采用分支流程的應用更是在流程控制方面需要下很大功夫完善其運行,避免出現(xiàn)設計之外的問題。
分支流程可分為同步阻塞流程與異步非阻塞流程。其中,對于同步阻塞流程,一般采用遞歸調用來進行流程控制。但是,在采用遞歸調用進行流程控制時,存在著流程控制可靠性差的問題。
技術實現(xiàn)要素:
本發(fā)明實施例解決的技術問題是在提高流程控制的可靠性。
為解決上述問題,本發(fā)明實施例提供了一種流程控制方法,所述流程包括多個事件節(jié)點,所述方法包括:
當出現(xiàn)新增事件節(jié)點時,判斷對應的流程棧是否已滿;
當確定所述流程棧已滿時,為所述流程棧申請增加對應的存儲空間;
當對應的存儲空間申請成功時,將所述新增事件節(jié)點壓入所述流程棧的棧頂。
可選地,所述對應的存儲空間大于或等于所述新增事件節(jié)點所占的存儲空間。
可選地,所述方法還包括:
取出所述流程棧棧頂?shù)氖录?jié)點并進行處理。
可選地,所述流程為同步阻塞流程。
本發(fā)明實施例還提供了一種流程控制裝置,所述流程包括多個事件節(jié)點,所述裝置包括:
判斷單元,適于當出現(xiàn)新增事件節(jié)點時,判斷對應的流程棧是否已滿;
請求單元,當確定所述流程棧已滿時,為所述流程棧申請增加對應的存儲空間;
控制單元,適于當對應的存儲空間申請成功時,將所述新增事件節(jié)點壓入所述流程棧的棧頂。
可選地,所述對應的存儲空間大于或等于所述新增事件節(jié)點所占的存儲空間。
可選地,所述裝置還包括:
處理單元,適于取出所述流程棧棧頂?shù)氖录?jié)點并進行處理。
可選地,所述流程為同步阻塞流程。
本發(fā)明實施例還提供了一種計算機可讀存儲介質,其上存儲有計算機指令,所述計算機指令運行時執(zhí)行上述任一項所述的流程控制方法的步驟。
本發(fā)明實施例還提供了一種終端,包括存儲器和處理器,所述存儲器上儲存有能夠在所述處理器上運行的計算機指令,所述處理器運行所述計算機指令時執(zhí)行上述任一項所述的流程控制方法的步驟。
與現(xiàn)有技術相比,本發(fā)明的技術方案具有以下的優(yōu)點:
上述的方案,通過基于流程中的事件節(jié)點的數(shù)量,對對應的流程棧所占的存儲空間進行調整,可以有效避免流程棧溢出情形的發(fā)生,提高流程控制的可靠性。
附圖說明
圖1是本發(fā)明實施例中的一種流程控制方法的流程圖;
圖2是本發(fā)明實施例中另一種流程控制方法的入棧和出棧操作的示意圖;
圖3是本發(fā)明實施例中的一種流程控制裝置的結構示意圖。
具體實施方式
現(xiàn)有技術中,一般采用遞歸調用來進行同步阻塞流程的流程控制。但是,因各不同操作系統(tǒng)分配給應用的??臻g是不確定且相對較小的,當遞歸調用層級太深時,易導致系統(tǒng)棧溢出風險的發(fā)生,從而發(fā)生應用崩潰甚至系統(tǒng)出錯的情況,存在著可靠性差的問題。
為解決現(xiàn)有技術中存在的上述問題,本發(fā)明實施例采用的技術方案基于流程中的事件節(jié)點的數(shù)量,對對應的流程棧所占的存儲空間進行調整,可以有效避免流程棧溢出情形的發(fā)生,提高流程控制的可靠性。
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結合附圖對本發(fā)明的具體實施例做詳細的說明。
在具體實施中,為了避免不同的應用在不同的操作系統(tǒng)環(huán)境下遷移時,發(fā)生棧溢出的風險,
圖1示出了本發(fā)明實施例中的一種流程控制方法的流程圖。如圖1所示的流程控制方法,適于對同步阻塞流程中的事件節(jié)點進行控制,具體可以包括如下的操作:
步驟s101:當出現(xiàn)新增事件節(jié)點時,判斷對應的流程棧是否已滿;當判斷結果為是時,可以執(zhí)行步驟s102;反之,則可以直接執(zhí)行步驟s104。
在具體實施中,對于一個同步阻塞流程,當流程控制開始時,系統(tǒng)分配給對應的流程棧的存儲空間可以根據(jù)實際的需要進行設置。在本發(fā)明一實施例中,在流程控制剛開始時,系統(tǒng)分配對對應的流程棧的存儲空間為零,也即同步阻塞流程對應的流程棧的棧頂指針和棧底指針指向同一個地址。
其中,在執(zhí)行同步阻塞流程中的過程中,當產(chǎn)生一個新增事件節(jié)點需要壓入流程棧中等待處理時,需要首先判斷對應的流程棧是否已滿。其中,在判斷對應的流程棧是否已滿時,可以通過流程棧的棧頂指針指向的地址和棧底指針指向的地址之間的差值進行判斷。具體而言,當棧頂指針指向的地址減去棧底指針指向的地址之間的差值小于系統(tǒng)當前分配給流程棧的存儲空間的大小時,可以確定流程棧未滿;當棧頂指針指向的地址減去棧底指針指向的地址之間的差值等于系統(tǒng)當前分配給流程棧的存儲空間的大小時,可以確定流程棧已滿。
步驟s102:當確定所述流程棧已滿時,為所述流程棧申請增加對應的存儲空間。
在具體實施中,當確定對應的流程棧已滿時,將出現(xiàn)的新增事件節(jié)點壓入流程棧的棧頂將會發(fā)生棧溢出的風險,為了避免此種情況的出現(xiàn),可以首先向系統(tǒng)申請為流程棧增加對應的存儲空間,以存儲新增事件節(jié)點。
其中,當確定所述流程棧已滿時,向系統(tǒng)申請增加的存儲空間的大小可以根據(jù)實際的需要進行設置。
在本發(fā)明一實施例中,為了提高存儲空間的利用效率,在每次確定流程棧已滿時,向系統(tǒng)申請增加的存儲空間足夠容納新增事件節(jié)點即可,即每當產(chǎn)生一個新增事件節(jié)點時,為所述新增事件節(jié)點申請一個事件節(jié)點對應的存儲空間。
在本發(fā)明另一實施例中,為了提高流程控制的效率,可以在產(chǎn)生一個新增事件節(jié)點時,向系統(tǒng)所申請增加的存儲空間大于一個新增事件節(jié)點對應的存儲空間,如申請5個事件節(jié)點對應的存儲空間。那么,在后續(xù)的4個事件節(jié)點產(chǎn)生時,將無需向系統(tǒng)再次申請存儲空間,可以直接進行入棧操作。
步驟s103:當對應的存儲空間申請成功時,將所述新增事件節(jié)點壓入所述流程棧的棧頂。
在具體實施中,當對應的存儲空間申請成功時,便可以將所述新增事件節(jié)點壓縮所述流程棧的棧頂,也即將所述新增事件節(jié)點作為流程棧的新的棧頂。
步驟s104:將所述新增事件節(jié)點壓入所述流程棧的棧頂。
在具體實施中,當確定流程棧未滿時,直接執(zhí)行將新增事件節(jié)點的入棧操作,也即將新增事件節(jié)點壓入流程棧的棧頂,將不會發(fā)生棧溢出的情形。因此,直接將新增事件節(jié)點壓入所述流程棧的棧頂即可。
在本發(fā)明一實施例中,步驟s103和步驟s104中將所述新增事件節(jié)點壓入所述流程棧的棧頂?shù)牟僮鞑捎煤艚校╟allflow)流程執(zhí)行。具體而言,阻塞調用另外一個流程的事件節(jié)點,即callflow節(jié)點,在調用完成后等待callflow節(jié)點執(zhí)行結束,callflow節(jié)點的返回值作為[xg1]的輸入,并執(zhí)行新增事件節(jié)點的入棧操作。[xg2]
在具體實施中,在對流程棧中的事件節(jié)點進行處理時,可以按照順序首先取出所述流程棧棧頂?shù)氖录?jié)點并執(zhí)行相應的處理操作。其中,可以采用返回(return)流程執(zhí)行流程棧中的事件節(jié)點的出棧處理。
參見圖2,假定流程棧中已有事件節(jié)點1至事件節(jié)點n,其中,n為大于等于1的整數(shù)。當新增事件節(jié)點n+1產(chǎn)生時,可以首先基于作為流程棧的棧底元素的事件節(jié)點1指向的地址,以及作為流程棧的棧頂元素的事件節(jié)點n指向的地址,確定流程棧是否已滿。當確定流程棧是否已滿時,向系統(tǒng)申請預設大小的存儲空間,并將新增事件節(jié)點n+1壓入流程棧的棧頂,代替事件節(jié)點n作為流程棧的棧頂元素;反之,當確定流程棧未滿時,則直接執(zhí)行將新增事件節(jié)點n+1壓入流程棧的棧頂?shù)牟僮骷纯?。當對流程中的事件?jié)點進行處理,也即出棧時,首先取出棧頂?shù)氖录?jié)點n+1進行處理。
這里需要指出的是,圖1和圖2所示的操作過程可以是即時的、接近即時的、漸進的或者是處于任何適當速率執(zhí)行。一旦上述的過程被激活,對應的過程進度可以由終端設備進行自動控制,獨立于用戶;或者,也可以由用戶對上述的過程進度進行控制。雖然上文描述的過程包括以特定順序執(zhí)行的多個操作,但應該清楚了解,這些過程可以包括更多或更少的操作,這些操作可以順序執(zhí)行或使用并行處理器或多線程環(huán)境并行執(zhí)行。
上述對本發(fā)明實施中的流程控制方法進行了詳細的描述,下面將對上述的方法對應的裝置進行介紹。
圖3示出了本發(fā)明實施例中的一種流程控制裝置的結構示意圖。參見圖3,本發(fā)明實施例中的一種流程控制裝置30,適于對同步阻塞流程中的時間節(jié)點進行控制,具體可以包括判斷子單元301、請求單元302和控制單元303,其中:
判斷單元301,適于當出現(xiàn)新增事件節(jié)點時,判斷對應的流程棧是否已滿;
請求單元302,當確定所述流程棧已滿時,為所述流程棧申請增加對應的存儲空間;在本發(fā)明一實施例中,所述對應的存儲空間大于或等于所述新增事件節(jié)點所占的存儲空間。
控制單元303,適于當對應的存儲空間申請成功時,將所述新增事件節(jié)點壓入所述流程棧的棧頂。
在本發(fā)明一實施例中,所述裝置30還可以包括處理單元304,其中:
處理單元304,適于取出所述流程棧棧頂?shù)氖录?jié)點并進行處理。
本發(fā)明實施例還提供了一種計算機可讀存儲介質,所述計算機指令運行時執(zhí)行上述任一所述的流程控制方法的步驟。其中,流程控制方法的步驟請參見前述相關部分的介紹,不再贅述。
本發(fā)明實施例還提供了一種終端,包括存儲器和處理器,所述存儲器上儲存有能夠在所述處理器上運行的計算機指令,所述處理器運行所述計算機指令時執(zhí)行上述任一所述的流程控制方法的步驟。其中,流程控制方法的步驟請參見前述相關部分的介紹,不再贅述。
采用本發(fā)明實施例中的上述方案,基于流程中的事件節(jié)點的數(shù)量,對對應的流程棧所占的存儲空間進行調整,可以有效避免流程棧溢出情形的發(fā)生,提高流程控制的可靠性。
本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,該程序可以存儲于計算機可讀存儲介質中,存儲介質可以包括:rom、ram、磁盤或光盤等。
以上對本發(fā)明實施例的方法及系統(tǒng)做了詳細的介紹,本發(fā)明并不限于此。任何本領域技術人員,在不脫離本發(fā)明的精神和范圍內,均可作各種更動與修改,因此本發(fā)明的保護范圍應當以權利要求所限定的范圍為準。