一種流程調(diào)度方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種流程調(diào)度方法及裝置,該方法包括:獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;根據(jù)第一執(zhí)行狀態(tài)信息,確定第一任務(wù)在第一流程的待執(zhí)行步驟;確定待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;獲取子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到待執(zhí)行步驟的執(zhí)行結(jié)果。本發(fā)明實(shí)施例中,子執(zhí)行單元至少包括第一流程的子流程,進(jìn)而通過調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,實(shí)現(xiàn)流程間調(diào)度處理。
【專利說明】
_種流程調(diào)度方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及信息系統(tǒng)處理技術(shù)領(lǐng)域,尤其涉及一種流程調(diào)度方法及裝置。
【背景技術(shù)】
[0002] 目前的流程調(diào)度控制主要由以下實(shí)現(xiàn)方式:(1)面向方面的程序編程(例如: Spring),將一組任務(wù)(步驟)進(jìn)行流程控制管理;(2)使用腳本和配置文件的調(diào)度。
[0003] 在上述實(shí)現(xiàn)方式中,單個(gè)任務(wù)對(duì)應(yīng)流程的并發(fā)處理困難,且不能實(shí)現(xiàn)流程間的相 互調(diào)度和并發(fā)調(diào)度。然而,在高性能系統(tǒng)中,往往需要對(duì)一個(gè)任務(wù)進(jìn)行流程間調(diào)度和并發(fā)處 理,上述方案沒有為該場(chǎng)景提供一個(gè)良好的解決方案。
[0004] 綜上,目前亟需一種流程調(diào)度方法,用于實(shí)現(xiàn)任務(wù)的流程間調(diào)度和并發(fā)處理。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實(shí)施例提供一種流程調(diào)度方法及裝置,用于實(shí)現(xiàn)任務(wù)的流程間調(diào)度處理。
[0006] 本發(fā)明實(shí)施例提供的一種流程調(diào)度方法,包括:
[0007] 獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;
[0008] 根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步驟;
[0009] 確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述第一任務(wù) 和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第一流程的 子流程;
[0010] 獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0011] 較佳地,所述子執(zhí)行單元由所述第一任務(wù)和所述第一流程的子流程構(gòu)成;
[0012] 所述調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括:
[0013] 調(diào)度所述第一流程的子流程執(zhí)行所述第一任務(wù);
[0014] 獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的第二執(zhí)行狀態(tài)信息;
[0015] 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0016] 較佳地,所述子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和所述第一流程的子流程構(gòu) 成;
[0017] 所述調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括:
[0018] 創(chuàng)建所述第一任務(wù)的多個(gè)子任務(wù);
[0019] 調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù);
[0020] 獲取所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息;
[0021 ]根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0022]較佳地,根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步 驟之后,還包括:
[0023]更新所述第一執(zhí)行狀態(tài)信息;
[0024]確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷所述第一流程的調(diào) 度;
[0025] 確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信息;
[0026] 根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行 步驟的執(zhí)行結(jié)果。
[0027] 較佳地,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果之后,還包括:
[0028] 根據(jù)所述待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度;
[0029] 確定由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存 在,則調(diào)度所述父執(zhí)行單元。
[0030] 較佳地,根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步 驟,包括:
[0031] 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行,則 確定所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟;或者,
[0032] 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i 個(gè)步驟,則確定所述待執(zhí)行步驟為第i+1個(gè)步驟。
[0033] 本發(fā)明實(shí)施例提供一種流程調(diào)度裝置,包括:
[0034] 獲取模塊,用于獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;
[0035]處理模塊,用于根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待 執(zhí)行步驟;以及確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述第 一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第一 流程的子流程;
[0036] 所述獲取模塊還用于,獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待執(zhí) 行步驟的執(zhí)行結(jié)果。
[0037] 較佳地,所述子執(zhí)行單元由所述第一任務(wù)和所述第一流程的子流程構(gòu)成;
[0038] 所述處理模塊具體用于:調(diào)度所述第一流程的子流程執(zhí)行所述第一任務(wù);
[0039] 所述獲取模塊具體用于:獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的第二 執(zhí)行狀態(tài)信息;根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0040] 較佳地,所述子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和所述第一流程的子流程構(gòu) 成;
[0041]所述處理模塊具體用于:
[0042]創(chuàng)建所述第一任務(wù)的多個(gè)子任務(wù);
[0043] 調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù);
[0044] 所述獲取模塊具體用于:
[0045] 獲取所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息;
[0046] 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0047]較佳地,所述處理模塊還用于:
[0048] 根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步驟之后, 更新所述第一執(zhí)行狀態(tài)信息;
[0049] 確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷所述第一流程的調(diào) 度;
[0050]所述獲取模塊還用于:
[0051 ]確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信息;
[0052]根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行 步驟的執(zhí)行結(jié)果。
[0053]較佳地,所述處理模塊還用于:
[0054]根據(jù)所述待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度;
[0055]確定由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存 在,則調(diào)度所述父執(zhí)行單元。
[0056]較佳地,所述處理模塊具體用于:
[0057]若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行,則 確定所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟;或者,
[0058]若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i 個(gè)步驟,則確定所述待執(zhí)行步驟為第i+1個(gè)步驟。
[0059] 本發(fā)明實(shí)施例中,獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;根據(jù) 第一執(zhí)行狀態(tài)信息,確定第一任務(wù)在第一流程的待執(zhí)行步驟;確定待執(zhí)行步驟的執(zhí)行語句 為子執(zhí)行單元調(diào)度語句后,調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;獲 取子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到待執(zhí)行步驟的執(zhí)行結(jié)果。本發(fā)明實(shí)施例中,子執(zhí)行 單元至少包括第一流程的子流程,進(jìn)而通過調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的 子執(zhí)行單元,實(shí)現(xiàn)流程間調(diào)度處理。
【附圖說明】
[0060] 為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使 用的附圖作簡(jiǎn)要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本 領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。
[0061 ]圖1為本發(fā)明實(shí)施例提供的一種流程調(diào)度方法的流程示意圖;
[0062] 圖2為本發(fā)明實(shí)施例中流程調(diào)度的執(zhí)行邏輯示意圖;
[0063] 圖3為本發(fā)明實(shí)施例提供的一種流程調(diào)度裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0064]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn) 一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施 例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的 所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0065] 本發(fā)明實(shí)施例中,流程指一種處理的邏輯順序關(guān)系。任務(wù)是指期望實(shí)現(xiàn)的一個(gè)目 標(biāo),任務(wù)可能需要經(jīng)過多個(gè)流程調(diào)度。步驟指流程被分割為多個(gè)處理階段,每個(gè)階段稱為一 個(gè)步驟。其中,一個(gè)任務(wù)在一個(gè)流程的執(zhí)行可以稱為執(zhí)行單元,即執(zhí)行單元是任務(wù)和流程的 二元組。
[0066] 圖1示例性的示出了本發(fā)明實(shí)施例提供的一種流程調(diào)度方法的流程,該流程可以 由流程調(diào)度裝置執(zhí)行,該裝置可以是服務(wù)器,也可以位于服務(wù)器內(nèi)。
[0067] 如圖1所示,該流程的具體步驟包括:
[0068] 步驟101,獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;
[0069] 步驟102,根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步 驟;
[0070] 步驟103,確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述 第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第 一流程的子流程;
[0071] 步驟104,獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行 結(jié)果。
[0072] 根據(jù)上述內(nèi)容可知,本發(fā)明實(shí)施例中,子執(zhí)行單元至少包括第一流程的子流程,進(jìn) 而通過調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,實(shí)現(xiàn)流程間調(diào)度處理。 調(diào)度
[0073] 具體地,步驟101中,所述第一執(zhí)行狀態(tài)信息包括以下任意一種:
[0074] 所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行;
[0075]所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i個(gè)步驟;其中,為 所述第一流程中需要執(zhí)行的步驟的個(gè)數(shù)。
[0076]在步驟102中,若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程 中首次執(zhí)行,則確定所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟,并將第一 執(zhí)行狀態(tài)信息更新為執(zhí)行至第一個(gè)步驟;若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度 的所述第一流程中已執(zhí)行完第i個(gè)步驟,則確定所述待執(zhí)行步驟為第i + 1個(gè)步驟,并將第一 執(zhí)行狀態(tài)信息更新為執(zhí)行完第i個(gè)步驟,執(zhí)行至第i+1個(gè)步驟。
[0077]需要說明的是,本發(fā)明實(shí)施例中,所述第一執(zhí)行狀態(tài)信息也可以為所述第一任務(wù) 在調(diào)度的所述第一流程中已執(zhí)行完畢,此時(shí),可根據(jù)第一執(zhí)行狀態(tài)信息,直接結(jié)束第一流程 的調(diào)度。
[0078]針對(duì)步驟103,若所述子執(zhí)行單元由所述第一任務(wù)和所述第一流程的子流程構(gòu)成, 則調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括:調(diào)度所述第 一流程的子流程執(zhí)行所述第一任務(wù);獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的第 二執(zhí)行狀態(tài)信息;根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0079]具體來說,上述子執(zhí)行單元調(diào)度情形為子流程調(diào)度(CALL_SUB_FL0W),子流程調(diào)度 的入?yún)⑹切碌牧鞒?,其目?biāo)是發(fā)起本任務(wù)在新流程的調(diào)度,等待新流程調(diào)度結(jié)束后,恢復(fù)本 任務(wù)在本流程的調(diào)度。子流程調(diào)度,會(huì)新增當(dāng)前執(zhí)行單元(當(dāng)前任務(wù)和當(dāng)前流程)和新執(zhí)行 單元(當(dāng)前任務(wù)和子流程)的父子關(guān)系。
[0080]例如:int ret = CALL_SUB_FLOW(get_db_connection);
[0081 ]其中 get_db_connection 是一個(gè)子流程。
[0082]針對(duì)步驟103,若子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和所述第一流程的子流程 構(gòu)成,則調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括:創(chuàng)建所 述第一任務(wù)的多個(gè)子任務(wù);調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù);獲取 所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息;根據(jù)所述第二執(zhí)行狀態(tài) 信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0083] 具體來說,上述子執(zhí)行單元調(diào)度情形為子任務(wù)調(diào)度(CALL_SUB_TASK),子任務(wù)調(diào)度 的入?yún)⑹切氯蝿?wù)(子任務(wù))和新流程(子流程),其目標(biāo)是異步發(fā)起新的任務(wù)和新流程(即新 的執(zhí)行單元),注意該調(diào)度是異步調(diào)度,此時(shí)新執(zhí)行單元和當(dāng)前執(zhí)行單元處于并發(fā)執(zhí)行狀 態(tài)。子任務(wù)調(diào)度,會(huì)新增當(dāng)前執(zhí)行單元(當(dāng)前任務(wù)和當(dāng)前流程)和新執(zhí)行單元(子任務(wù)和子流 程)的父子關(guān)系。
[0084] 例如:〇厶1^_31113_了厶31((8181116_9116^,81113_1&81〇;
[0085] 其中signle_query是一個(gè)子流程,sub_task是一個(gè)子任務(wù)。
[0086] 進(jìn)一步地,子任務(wù)調(diào)度一般需要和如下2個(gè)操作結(jié)合:
[0087] (1)等待子任務(wù)結(jié)束(SUB_TASKS_FINISH):會(huì)查看當(dāng)前執(zhí)行單元的所有子執(zhí)行單 元是否執(zhí)行結(jié)束,若未完成則中斷本流程調(diào)度,等待下次恢復(fù)。
[0088]例如:SUB_TASKS_FINISH();用于等待當(dāng)前任務(wù)的所有子任務(wù)調(diào)度結(jié)束.
[0089] (2)調(diào)度結(jié)果查詢(GET_RESULT):用于查看執(zhí)行單元(任務(wù)和流程)的調(diào)度狀態(tài):1) 任務(wù)是否結(jié)束,2)如果任務(wù)結(jié)束,獲取其返回碼。
[0090]例如:int ret=ACALL_RESULT(signle_query,sub_task);
[0091 ] 用于查詢?nèi)蝿?wù)sub_task在signle_query流程的處理狀態(tài)。
[0092]下面給出一個(gè)子任務(wù)調(diào)度的示例:
[0094] 在該示例中,當(dāng)前執(zhí)行單元中創(chuàng)建了多個(gè)子執(zhí)行單元,并發(fā)起異步的子執(zhí)行單元 調(diào)度,子任務(wù)之間為并發(fā)狀態(tài),然后通過SUB_TASKS_FINISH查看所有子執(zhí)行單元是否結(jié)束, 如果未結(jié)束則中斷本調(diào)度,等待下次調(diào)度。
[0095] 本發(fā)明實(shí)施例中,子流程調(diào)度和子任務(wù)調(diào)度都會(huì)新增執(zhí)行單元的父子關(guān)系。當(dāng)一 個(gè)執(zhí)行單元結(jié)束(RETURN操作),則會(huì)查找它的父執(zhí)行單元信息,如果存在,則恢復(fù)父執(zhí)行單 元的執(zhí)行。
[0096] 在步驟103中,若確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句,則執(zhí)行如 下操作:中斷所述第一流程的調(diào)度,確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行 狀態(tài)信息;根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行 步驟的執(zhí)行結(jié)果。
[0097] 上述過程即為異步調(diào)度過程,在流程調(diào)度中,出現(xiàn)某個(gè)處理步驟需要等待一個(gè)異 步事件(例如,向網(wǎng)絡(luò)中寫入報(bào)文阻塞需要等待異步的可寫事件,或者等待一個(gè)消息應(yīng)答的 可讀事件)時(shí),則中斷本流程的調(diào)度。異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信 息,確定上次執(zhí)行完第i個(gè)步驟,執(zhí)行至第i+1個(gè)步驟,此時(shí),繼續(xù)執(zhí)行第i+1個(gè)步驟。
[0098] 本發(fā)明實(shí)施例中,異步等待(WAIT),用于中斷而不結(jié)束本流程的調(diào)度,例如:WAIT 0;
[0099] 被中斷的流程,恢復(fù)執(zhí)行有如下途徑:(1)外部異步處理系統(tǒng)回調(diào)本流程;)(2)其 他子流程調(diào)度本流程(同步調(diào)度、異步調(diào)度和調(diào)度結(jié)束后調(diào)度)。
[0100] 下面給出一個(gè)異步調(diào)度的流程示例:
[0102] 在該示例中,任務(wù)task執(zhí)行流程a,而async_task是一個(gè)異步操作,如果該操作未 完成,流程調(diào)度則調(diào)度WAIT,中斷本次流程調(diào)度,當(dāng)asyn C_task異步操作出現(xiàn)變化,則回調(diào) 任務(wù)task執(zhí)行流程a來恢復(fù)流程調(diào)度。
[0103] 進(jìn)一步地,在步驟104中得到所述待執(zhí)行步驟的執(zhí)行結(jié)果之后,還包括:根據(jù)所述 待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度;確定由所述第一任務(wù)和所述第一流程 構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存在,則調(diào)度所述父執(zhí)行單元。
[0104] 本發(fā)明實(shí)施例可由如下具有不同功能的模塊來執(zhí)行,具體來說:
[0105] 流程調(diào)度模塊:負(fù)責(zé)流程內(nèi)的執(zhí)行邏輯,同一個(gè)任務(wù)在流程中只會(huì)是單線程執(zhí)行, 不存在并發(fā),流程調(diào)度模塊是本方案的核心模塊,會(huì)與流程調(diào)度模塊、調(diào)度管理模塊和外部 異步處理系統(tǒng)模塊交互;
[0106] 調(diào)度管理模塊:調(diào)度管理模塊用于記錄調(diào)度管理相關(guān)信息,這些信息包含:流程調(diào) 度狀態(tài)和流程間調(diào)度狀態(tài);
[0107] 流程調(diào)度狀態(tài)即為某任務(wù)在某個(gè)流程下的狀態(tài)信息,包含如下內(nèi)容:1)(該任務(wù)在 該流程下)運(yùn)行狀態(tài),即調(diào)度是否結(jié)束;2)(該任務(wù)在該流程下)如果已調(diào)度結(jié)束,則該流程 的結(jié)束應(yīng)答碼是什么;3)(該任務(wù)在該流程下)所處的步驟;4)(該任務(wù)在該流程下的)臨時(shí) 數(shù)據(jù)。其數(shù)據(jù)存儲(chǔ)如表1所示,其中任務(wù)和流程聯(lián)合(執(zhí)行單元)作為行記錄的索引字段:
[0108] 表1:數(shù)據(jù)存儲(chǔ)示意
[0110] 流程間調(diào)度狀態(tài)用于記錄流程調(diào)度的父子關(guān)系,需要注意的是這里的父子關(guān)系是 執(zhí)行單元(任務(wù)和流程)的父子關(guān)系,其記錄形式類似表2,其中子任務(wù)和子流程聯(lián)合作為行 記錄的索引字段:
[0111] 表2:執(zhí)行單元父子關(guān)系的記錄形式
[0113] 流程調(diào)度模塊:負(fù)責(zé)調(diào)度任務(wù)執(zhí)行流程,該模塊用于實(shí)現(xiàn)流程的間調(diào)度(嵌套調(diào) 度),該模塊與流程管理模塊、調(diào)度管理模塊和流程調(diào)度模塊交互。
[0114] 流程管理模塊:負(fù)責(zé)維護(hù)所有的流程,用于流程檢索,例如維護(hù)流程名(也可以是 流程內(nèi)容地址等)到流程內(nèi)容的映射關(guān)系,便于根據(jù)流程名檢索流程內(nèi)容,該模塊提供查詢 服務(wù),被流程調(diào)度模塊和流程編譯模塊調(diào)度。
[0115] 流程編譯模塊:是本方案的可選模塊,負(fù)責(zé)將流程進(jìn)行編譯或預(yù)編譯,提高流程執(zhí) 行的效率,負(fù)責(zé)將流程編譯后存入流程管理模塊。
[0116] 外部異步處理系統(tǒng)模塊:負(fù)責(zé)與外部異步系統(tǒng)協(xié)調(diào),主要負(fù)責(zé):(1)被流程調(diào)度模 塊調(diào)度進(jìn)行異步行為操作;(2)當(dāng)外部系統(tǒng)異步事件發(fā)生時(shí),通過流程調(diào)度模塊,恢復(fù)或發(fā) 起原執(zhí)行單元的調(diào)度。
[0117] 圖2為本發(fā)明實(shí)施例中流程調(diào)度的執(zhí)行邏輯示意圖,下面結(jié)合圖2對(duì)本發(fā)明實(shí)施例 中流程調(diào)度的整體過程進(jìn)行說明。
[0118] 第1步:查詢執(zhí)行單元所處的狀態(tài),決定應(yīng)該執(zhí)行的流程步驟。通過訪問調(diào)度管理 模塊,查詢當(dāng)前執(zhí)行流程的執(zhí)行狀態(tài):
[0119] (1)若為首次調(diào)度,則將本流程的第一個(gè)步驟設(shè)置為待執(zhí)行步驟。
[0120] (2)若已執(zhí)行結(jié)束,則退出本次調(diào)度;
[0121] (3)若執(zhí)行步驟,并查看步驟類型:(3.1)若步驟類型為重復(fù)執(zhí)行(Redo),則將該步 驟設(shè)置為待執(zhí)行步驟;(3.2)若步驟類型為單次執(zhí)行(Do),則將該步的下個(gè)驟設(shè)置為待執(zhí)行 步驟。
[0122] 第2步:進(jìn)入待執(zhí)行步驟進(jìn)行執(zhí)行。其執(zhí)行流程如下:(1)訪問調(diào)度管理模塊修改當(dāng) 前執(zhí)行單元的步驟為當(dāng)前步驟;(2)每個(gè)步驟由一組邏輯語句執(zhí)行,根據(jù)語句順序進(jìn)行執(zhí) 行,其中語句類型分為:流程調(diào)度語句和其他語句,流程調(diào)度語句由本方法提供,其他語句 為本方法應(yīng)用的宿主程序語言或腳本(例如本方法應(yīng)用在C語言下,則其他語句為C語言), 下面將流程調(diào)度語句的執(zhí)行語句進(jìn)行說明:
[0123] (2.1)步驟跳轉(zhuǎn)語句(GOTO):
[0124] (2.1.1)將待執(zhí)行步驟設(shè)置為語句指定的步驟;
[0125] (2.1.2),執(zhí)行第2步;
[0126] (2.2)流程結(jié)束語句(RETURN):
[0127] (2.2.1)調(diào)度調(diào)度管理模塊修改執(zhí)行單元的執(zhí)行狀態(tài)為結(jié)束,并對(duì)應(yīng)記錄應(yīng)答碼;
[0128] (2.2.2)終止當(dāng)前執(zhí)行單元的執(zhí)行(調(diào)度);
[0129] (2.2.3)查看調(diào)度管理模塊,查找父執(zhí)行單元,如果存在父執(zhí)行單元,則發(fā)起父執(zhí) 行單元執(zhí)行操作;
[0130] (2.3)子流程調(diào)度語句(041^_31^_?11^):
[0131] (2.3.1)訪問調(diào)度管理模塊,記錄當(dāng)前執(zhí)行單元(當(dāng)前流程和當(dāng)前任務(wù))與子執(zhí)行 單元(子流程和當(dāng)前任務(wù))的父子關(guān)系;
[0132] (2.3.2)向流程調(diào)度模塊發(fā)起執(zhí)行,由流程調(diào)度模塊發(fā)起對(duì)子執(zhí)行單元的調(diào)度執(zhí) 行;
[0133] (2.3.3)訪問調(diào)度管理模塊,查看子執(zhí)行單元狀態(tài),如果未完成,則暫停當(dāng)前執(zhí)行 單元的執(zhí)行(調(diào)度),如果已完成則返回子執(zhí)行單元的返回值,并執(zhí)行本步驟下條語句;
[0134] (2.4)子任務(wù)調(diào)度語句(〇厶1^_31^_了厶31〇:
[0135] (2.4.1)訪問調(diào)度管理模塊,記錄當(dāng)前執(zhí)行單元(當(dāng)前流程和當(dāng)前任務(wù))與子執(zhí)行 單元(子流程和子任務(wù))的父子關(guān)系;
[0136] (2.4.2)向流程調(diào)度模塊發(fā)起執(zhí)行,由流程調(diào)度模塊發(fā)起對(duì)子執(zhí)行單元的調(diào)度執(zhí) 行;
[0137] (2.4.3)執(zhí)行本步驟下條語句;
[0138] (2.5)等待子任務(wù)結(jié)束(51^_了厶51(5_卩預(yù)151〇:
[0139] (2.5.1)訪問調(diào)度管理模塊,查看當(dāng)前執(zhí)行單元的所有子執(zhí)行單元是否都已經(jīng)完 成調(diào)度,如果沒有全部結(jié)束,則暫停當(dāng)前執(zhí)行單元的執(zhí)行(調(diào)度),如果全部結(jié)束,則執(zhí)行本 步驟下條語句;
[0140] (2.6)調(diào)度結(jié)果查詢(6£1'_1^31]1^):
[0141] (2.6.1)訪問調(diào)度管理模塊,查看指定執(zhí)行單元的執(zhí)行應(yīng)答碼,并作為返回值返 回;
[0142] (2 ? 6 ? 2)執(zhí)行本步驟下條語句;
[0143] (2.7)異步等待(WAIT):
[0144] (2.7.1)暫停當(dāng)前執(zhí)行單元的執(zhí)行(調(diào)度);
[0145] (2.8)臨時(shí)數(shù)據(jù)存儲(chǔ)(SET):
[0146] (2.8.1)訪問調(diào)度管理模塊,將臨時(shí)數(shù)據(jù)存入對(duì)應(yīng)執(zhí)行單元;
[0147] (2.8.2)執(zhí)行本步驟下條語句;
[0148] (2.9)臨時(shí)數(shù)據(jù)獲取(GET):
[0149] (2.9.1)訪問調(diào)度管理模塊,從對(duì)應(yīng)執(zhí)行單元獲取臨時(shí)數(shù)據(jù);
[0150] (2.9.2)執(zhí)行本步驟下條語句。
[0151] 下面給出具體示例(分庫數(shù)據(jù)查詢),對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
[0152]內(nèi)容:將數(shù)據(jù)分片存儲(chǔ)在多個(gè)數(shù)據(jù)庫節(jié)點(diǎn)上,通過代理并發(fā)查詢多個(gè)數(shù)據(jù)庫等到 查詢結(jié)果。
[0153] 該操作需要會(huì)使用到3個(gè)流程:shard_query (分庫查詢),single_query(單庫查 詢),get_db_connection獲取數(shù)據(jù)庫連接。
[0154]結(jié)合該示例,可具體說明流程內(nèi)調(diào)度、流程間調(diào)度、并發(fā)調(diào)度和異步調(diào)度,以及異 步事件處理等是如何實(shí)現(xiàn)的。
[0155] (1)給出shard_query流程的偽代碼描述:
[0156]
[0158] shard_query 分為 6 個(gè)步驟:shard_analysis分庫分析、async_sub_tasks子任務(wù)異 步調(diào)度、check_shard_query_ressult 子任務(wù)結(jié)果檢測(cè)、merge_and_response 結(jié)果集合并、 success成功處理、fail失敗處理
[0159] 該處理流程(shard_query)過程:
[0160]第1步:訪問調(diào)度管理模塊查看當(dāng)前執(zhí)行單元是否已經(jīng)結(jié)束,如果調(diào)度已經(jīng)結(jié)束, 則結(jié)束調(diào)度;若未結(jié)束,則查看最近使用的步驟,如果為首次執(zhí)行,則執(zhí)行步驟shard_ analysis(首個(gè)步驟),即第2步;
[0161 ] 如果最近步驟為shard_analysis,則執(zhí)行async_sub_tasks,即第3步;
[0162] 如果最近步驟為async_sub_tasks,則執(zhí)行check_shard_query_ressult,即第4 步;
[0163] 如果最近步驟為。116。1<_811&1(1_9116^_代8 81111:,則執(zhí)行(3116。1<_811&1(1_9116^_ ressult,即第4步(因?yàn)閏heck_shard_query_ressult的步驟類型是重復(fù)執(zhí)行(Redo));
[0164] 如果最近步驟為merge_and_response,則執(zhí)行success,即第6步。
[0165] 第2步:執(zhí)行 shard_analysis 步驟:
[0166]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為shard_analysis;
[0167]進(jìn)行分庫分析,得到可能需要訪問的后端數(shù)據(jù)庫;
[0168]由于本步驟已執(zhí)行完畢,執(zhí)行下個(gè)步驟async_sub_tasks,即第3步;
[0169] 第3步:執(zhí)行 async_sub_tasks 步驟:
[0170] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為async_sub_tasks;
[0171] 負(fù)責(zé)根據(jù)需要訪問的數(shù)據(jù)列表,創(chuàng)建該查詢?nèi)蝿?wù)的子任務(wù),然后對(duì)每個(gè)子任務(wù)發(fā) 起異步子任務(wù)調(diào)度(流程為single_query);
[0172] SUB_TASKS_FINISH()查看所有子流程是否執(zhí)行結(jié)束,若未執(zhí)行結(jié)束,則暫停當(dāng)前 執(zhí)行單元的執(zhí)行;
[0173] 由于本步驟已執(zhí)行完畢,執(zhí)行下個(gè)步驟check_shard_query_ressul t,即第4步。
[0174] 第4步:執(zhí)行 check_shard_query_ressult 步驟:
[0175] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為check_shard_query_ressult;
[0176] 遍歷所有子任務(wù)調(diào)度,并訪問調(diào)度管理模塊,查看子執(zhí)行單元是應(yīng)答碼,判斷是否 所有子執(zhí)行單元都處理成功;
[0177] 若存在失敗的子執(zhí)行單元,則使用GOTO(fail),執(zhí)行下個(gè)步驟fail,即第7步;
[0178] 由于本步驟已執(zhí)行完畢,執(zhí)行下個(gè)步驟merge_and_response,即第5步。
[0179] 第5步:執(zhí)行 merge_and_response 步驟
[0180] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為merge_and_response;
[0181]進(jìn)行結(jié)果集合并等操作;
[0182] 由于本步驟已執(zhí)行完畢,執(zhí)行下個(gè)步驟success,即第6步。
[0183] 第6步:執(zhí)行success步驟:
[0184] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為success;
[0185] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元已執(zhí)行結(jié)束,且應(yīng)答碼為SUCCESS;
[0186] 結(jié)束本執(zhí)行單元調(diào)度;
[0187] 查看是否有父執(zhí)行單元,如果有則需要去調(diào)度(在本例中父執(zhí)行單元是流程 shard_query和父任務(wù),發(fā)起對(duì)該執(zhí)行單元的調(diào)度后,父流程會(huì)在async_sub_tasks處恢復(fù) 執(zhí)行)。
[0188] 第7步:執(zhí)行fail步驟:
[0189] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為fail;
[0190]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元已執(zhí)行結(jié)束,且應(yīng)答碼為FAIL;
[0191]結(jié)束本執(zhí)行單元調(diào)度;
[0192] 查看是否有父執(zhí)行單元,如果有則需要去調(diào)度(在本例中父執(zhí)行單元是流程 shard_query和父任務(wù),發(fā)起對(duì)該執(zhí)行單元的調(diào)度后,父流程會(huì)在async_sub_tasks處恢復(fù) 執(zhí)行)。
[0193] 上述過程中:第3步調(diào)度子流程的Single_qUery是流程間異步調(diào)度,同時(shí)實(shí)現(xiàn)了并 發(fā)調(diào)度控制,第4步GOTO是使用流程內(nèi)調(diào)度。
[0194] (2)給出single_query流程的偽代碼描述:
[0198] single_query分為5個(gè)步驟:〖61:_。〇11116。1:;[011分庫分析、8611(1_8卩1子任務(wù)異步調(diào) 度、read_result子任務(wù)完成檢測(cè)、success成功處理、fail失敗處理。
[0199] 該處理流程(single_query)過程:
[0200] 第1步:訪問調(diào)度管理模塊查看當(dāng)前執(zhí)行單元是否已經(jīng)結(jié)束,如果調(diào)度已經(jīng)結(jié)束, 則結(jié)束調(diào)度;若未結(jié)束,則查看最近使用的步驟,如果為首次執(zhí)行,則執(zhí)行步驟get_ connect ion (首個(gè)步驟),即第2步;
[0201 ]如果步驟為get_connection,則執(zhí)行g(shù)et_connection,即第2步;
[0202] 如果步驟為send_sql,則執(zhí)行send_sql,即第3步;
[0203] 如果步驟為read_result,則執(zhí)行read_result,即第4步。
[0204]第2步:執(zhí)行步驟 get_connection:
[0205]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為get_connection;
[0206] 發(fā)起子流程調(diào)度;
[0207] 向調(diào)度管理模塊查詢,子流程調(diào)度是否結(jié)束,如果未結(jié)束,則暫停本執(zhí)行單元調(diào) 度,如已結(jié)束則執(zhí)行下個(gè)步驟。
[0208] 第3步:執(zhí)行步驟send_sql:
[0209]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為send_sql;
[0210] 其中write(Sql,net)用于向網(wǎng)絡(luò)通信寫入數(shù)據(jù),該操作可能因?yàn)榫W(wǎng)絡(luò)等問題需要 等待,即暫時(shí)不可寫入網(wǎng)絡(luò);
[0211] 如果發(fā)生了暫時(shí)不可寫入網(wǎng)絡(luò),則通過WAIT,暫停本調(diào)度。當(dāng)網(wǎng)絡(luò)可寫或出現(xiàn)異常 時(shí),將觸發(fā)對(duì)本執(zhí)行單元重新調(diào)度,即進(jìn)入第1步。如果寫入完畢,則進(jìn)入下一步read_ result步驟,即第4步;
[0212] 向調(diào)度管理模塊查詢,子流程調(diào)度是否結(jié)束,如果未結(jié)束,則暫停本執(zhí)行單元調(diào) 度,如已結(jié)束則執(zhí)行下個(gè)步驟。
[0213] 第4步:執(zhí)行步驟 read_requslt:
[0214]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為send_sql;其中read(net)用于從網(wǎng) 絡(luò)通信讀取數(shù)據(jù),該操作可能因?yàn)榫W(wǎng)絡(luò)等問題需要等待,即網(wǎng)絡(luò)暫時(shí)不可讀。
[0215] 如果發(fā)生了暫時(shí)不可讀,則通過WAIT,暫停本調(diào)度。當(dāng)網(wǎng)絡(luò)可讀或出現(xiàn)異常時(shí),將 觸發(fā)對(duì)本執(zhí)行單元重新調(diào)度,即進(jìn)入第1步。如果讀完畢,則進(jìn)入下一步success步驟,即第5 步。如果讀出現(xiàn)異常,則進(jìn)入下一步fail步驟,即第6步。
[0216] 第5步:執(zhí)行success步驟:
[0217] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為success;
[0218]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元已執(zhí)行結(jié)束,且應(yīng)答碼為SUCCESS;
[0219] 結(jié)束本執(zhí)行單元調(diào)度;
[0220] 查看是否有父執(zhí)行單元,如果有則需要去調(diào)度(在本例中父執(zhí)行單元是流程 shard_query和父任務(wù),發(fā)起對(duì)該執(zhí)行單元的調(diào)度后,父流程會(huì)在async_sub_tasks處恢復(fù) 執(zhí)行)。
[0221] 第6步:執(zhí)行fail步驟:
[0222] 告知調(diào)度管理模塊當(dāng)前執(zhí)行單元使用步驟為fail;
[0223]告知調(diào)度管理模塊當(dāng)前執(zhí)行單元已執(zhí)行結(jié)束,且應(yīng)答碼為FAIL;
[0224] 結(jié)束本執(zhí)行單元調(diào)度;
[0225] 查看是否有父執(zhí)行單元,如果有則需要去調(diào)度(在本例中父執(zhí)行單元是流程 shard_query和父任務(wù),發(fā)起對(duì)該執(zhí)行單元的調(diào)度后,父流程會(huì)在async_sub_tasks處恢復(fù) 執(zhí)行)。
[0226] 流程get_db_connection可參照上述過程,此處不再贅述。
[0227] 本發(fā)明實(shí)施例中,通過上述流程調(diào)度方法,可實(shí)現(xiàn)以下效果:(1)任務(wù)內(nèi)的多并發(fā) 處理;(2)流程間的嵌套調(diào)度,可以將復(fù)用度較高的調(diào)度邏輯,獨(dú)立維護(hù)為一個(gè)子邏輯,以提 高流程的復(fù)用程度,簡(jiǎn)化流程編寫和管理成本;(3)將異步處理封裝成與同步調(diào)度類似,易 于理解,同時(shí)支持異步和同步的流程處理動(dòng)作,以滿足系統(tǒng)的復(fù)雜調(diào)度模式。
[0228] 本發(fā)明實(shí)施例中,獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;根據(jù) 第一執(zhí)行狀態(tài)信息,確定第一任務(wù)在第一流程的待執(zhí)行步驟;確定待執(zhí)行步驟的執(zhí)行語句 為子執(zhí)行單元調(diào)度語句后,調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;獲 取子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到待執(zhí)行步驟的執(zhí)行結(jié)果。本發(fā)明實(shí)施例中,子執(zhí)行 單元至少包括第一流程的子流程,進(jìn)而通過調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單元的 子執(zhí)行單元,實(shí)現(xiàn)流程間調(diào)度處理。
[0229] 本發(fā)明實(shí)施例中,獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;根據(jù) 第一執(zhí)行狀態(tài)信息,確定第一任務(wù)在第一流程的待執(zhí)行步驟,并更新第一執(zhí)行狀態(tài)信息;確 定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷第一流程的調(diào)度;確定異步事 件發(fā)生后,獲取更新后的第一執(zhí)行狀態(tài)信息;根據(jù)更新后的第一執(zhí)行狀態(tài)信息,執(zhí)行待執(zhí)行 步驟,并得到待執(zhí)行步驟的執(zhí)行結(jié)果。根據(jù)上述內(nèi)容可知,本發(fā)明實(shí)施例中,確定存在異步 事件后,中斷第一流程的調(diào)度,等待異步事件發(fā)生后,恢復(fù)第一流程的調(diào)度,從而使得流程 處理更符合處理邏輯。
[0230]圖3示例性的示出了本發(fā)明實(shí)施例提供的一種流程調(diào)度裝置的結(jié)構(gòu),該流程調(diào)度 裝置可以執(zhí)行流程調(diào)度的流程,該裝置可以是服務(wù)器,也可以位于服務(wù)器內(nèi)。
[0231] 如圖3所示,該裝置具體包括:
[0232] 獲取模塊301,用于獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息;
[0233]處理模塊302,用于根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的 待執(zhí)行步驟;以及確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述 第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第 一流程的子流程;
[0234]所述獲取模塊301還用于,獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待 執(zhí)行步驟的執(zhí)行結(jié)果。
[0235]較佳地,所述子執(zhí)行單元由所述第一任務(wù)和所述第一流程的子流程構(gòu)成;
[0236]所述處理模塊302具體用于:調(diào)度所述第一流程的子流程執(zhí)行所述第一任務(wù);
[0237] 所述獲取模塊301具體用于:獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的 第二執(zhí)行狀態(tài)信息;根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。
[0238] 較佳地,所述子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和所述第一流程的子流程構(gòu) 成;
[0239] 所述處理模塊302具體用于:
[0240]創(chuàng)建所述第一任務(wù)的多個(gè)子任務(wù);
[0241 ]調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù);
[0242]所述獲取模塊301具體用于:
[0243] 獲取所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息;
[0244] 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。較佳地,所述處理 模塊302還用于:
[0245] 確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷所述第一流程的調(diào) 度;
[0246] 所述獲取模塊301還用于:
[0247] 根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步驟之后, 更新所述第一執(zhí)行狀態(tài)信息;
[0248] 確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信息;
[0249] 根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行 步驟的執(zhí)行結(jié)果。
[0250] 較佳地,所述處理模塊302還用于:
[0251] 根據(jù)所述待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度;
[0252] 確定由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存 在,則調(diào)度所述父執(zhí)行單元。
[0253] 較佳地,所述處理模塊302具體用于:
[0254] 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行,則 確定所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟;或者,
[0255] 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i 個(gè)步驟,則確定所述待執(zhí)行步驟為第i+1個(gè)步驟。
[0256] 從上述內(nèi)容可以看出:本發(fā)明實(shí)施例中,獲取第一任務(wù)在調(diào)度的第一流程中的第 一執(zhí)行狀態(tài)信息;根據(jù)第一執(zhí)行狀態(tài)信息,確定第一任務(wù)在第一流程的待執(zhí)行步驟;確定待 執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由第一任務(wù)和第一流程構(gòu)成的執(zhí)行單 元的子執(zhí)行單元;獲取子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到待執(zhí)行步驟的執(zhí)行結(jié)果。本發(fā) 明實(shí)施例中,子執(zhí)行單元至少包括第一流程的子流程,進(jìn)而通過調(diào)度由第一任務(wù)和第一流 程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,實(shí)現(xiàn)流程間調(diào)度處理。
[0257] 本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程 圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流 程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序 指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn) 生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí) 現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0258] 這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特 定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指 令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或 多個(gè)方框中指定的功能。
[0259] 這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì) 算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或 其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一 個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0260]盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造 性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu) 選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
[0261]顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
【主權(quán)項(xiàng)】
1. 一種流程調(diào)度方法,其特征在于,包括: 獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息; 根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步驟; 確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述第一任務(wù)和所 述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第一流程的子流 程; 獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。2. 如權(quán)利要求1所述的方法,其特征在于,所述子執(zhí)行單元由所述第一任務(wù)和所述第一 流程的子流程構(gòu)成; 所述調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括: 調(diào)度所述第一流程的子流程執(zhí)行所述第一任務(wù); 獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的第二執(zhí)行狀態(tài)信息; 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。3. 如權(quán)利要求1所述的方法,其特征在于,所述子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和 所述第一流程的子流程構(gòu)成; 所述調(diào)度由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元,包括: 創(chuàng)建所述第一任務(wù)的多個(gè)子任務(wù); 調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù); 獲取所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息; 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。4. 如權(quán)利要求1所述的方法,其特征在于,根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一 任務(wù)在第一流程的待執(zhí)行步驟之后,還包括: 更新所述第一執(zhí)行狀態(tài)信息; 確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷所述第一流程的調(diào)度; 確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信息; 根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行步驟 的執(zhí)行結(jié)果。5. 如權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果 之后,還包括: 根據(jù)所述待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度; 確定由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存在, 則調(diào)度所述父執(zhí)行單元。6. 如權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,根據(jù)所述第一執(zhí)行狀態(tài)信息,確 定所述第一任務(wù)在第一流程的待執(zhí)行步驟,包括: 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行,則確定 所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟;或者, 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i個(gè)步 驟,則確定所述待執(zhí)行步驟為第i+Ι個(gè)步驟。7. -種流程調(diào)度裝置,其特征在于,包括: 獲取模塊,用于獲取第一任務(wù)在調(diào)度的第一流程中的第一執(zhí)行狀態(tài)信息; 處理模塊,用于根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行 步驟;以及確定所述待執(zhí)行步驟的執(zhí)行語句為子執(zhí)行單元調(diào)度語句后,調(diào)度由所述第一任 務(wù)和所述第一流程構(gòu)成的執(zhí)行單元的子執(zhí)行單元;所述子執(zhí)行單元至少包括所述第一流程 的子流程; 所述獲取模塊還用于,獲取所述子執(zhí)行單元的第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步 驟的執(zhí)行結(jié)果。8. 如權(quán)利要求7所述的裝置,其特征在于,所述子執(zhí)行單元由所述第一任務(wù)和所述第一 流程的子流程構(gòu)成; 所述處理模塊具體用于:調(diào)度所述第一流程的子流程執(zhí)行所述第一任務(wù); 所述獲取模塊具體用于:獲取所述第一任務(wù)在調(diào)度的第一流程的子流程中的第二執(zhí)行 狀態(tài)信息;根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。9. 如權(quán)利要求7所述的裝置,其特征在于,所述子執(zhí)行單元由所述第一任務(wù)的子任務(wù)和 所述第一流程的子流程構(gòu)成; 所述處理模塊具體用于: 創(chuàng)建所述第一任務(wù)的多個(gè)子任務(wù); 調(diào)度所述第一流程的多個(gè)子流程分別執(zhí)行所述多個(gè)任務(wù); 所述獲取模塊具體用于: 獲取所述多個(gè)子任務(wù)在調(diào)度的所述多個(gè)子流程中的第二執(zhí)行狀態(tài)信息; 根據(jù)所述第二執(zhí)行狀態(tài)信息,得到所述待執(zhí)行步驟的執(zhí)行結(jié)果。10. 如權(quán)利要求7所述的裝置,其特征在于,所述處理模塊還用于: 根據(jù)所述第一執(zhí)行狀態(tài)信息,確定所述第一任務(wù)在第一流程的待執(zhí)行步驟之后,更新 所述第一執(zhí)行狀態(tài)信息; 確定所述待執(zhí)行步驟的執(zhí)行語句為異步等待執(zhí)行語句后,中斷所述第一流程的調(diào)度; 所述獲取模塊還用于: 確定所述異步事件發(fā)生后,獲取更新后的所述第一執(zhí)行狀態(tài)信息; 根據(jù)更新后的所述第一執(zhí)行狀態(tài)信息,執(zhí)行所述待執(zhí)行步驟,并得到所述待執(zhí)行步驟 的執(zhí)行結(jié)果。11. 如權(quán)利要求7-11中任一項(xiàng)所述的裝置,其特征在于,所述處理模塊還用于: 根據(jù)所述待執(zhí)行步驟的執(zhí)行結(jié)果,結(jié)束所述第一流程的調(diào)度; 確定由所述第一任務(wù)和所述第一流程構(gòu)成的執(zhí)行單元是否存在父執(zhí)行單元,若存在, 則調(diào)度所述父執(zhí)行單元。12. 如權(quán)利要求7-11中任一項(xiàng)所述的裝置,其特征在于,所述處理模塊具體用于: 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中首次執(zhí)行,則確定 所述待執(zhí)行步驟為所述第一流程中需要執(zhí)行的第一個(gè)步驟;或者, 若所述第一執(zhí)行狀態(tài)信息為所述第一任務(wù)在調(diào)度的所述第一流程中已執(zhí)行完第i個(gè)步 驟,則確定所述待執(zhí)行步驟為第i+Ι個(gè)步驟。
【文檔編號(hào)】G06F9/44GK106055322SQ201610361976
【公開日】2016年10月26日
【申請(qǐng)日】2016年5月26日
【發(fā)明人】周家晶, 苗浩, 冀乃庚, 劉蓉
【申請(qǐng)人】中國(guó)銀聯(lián)股份有限公司