国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種應(yīng)用進(jìn)程的流程調(diào)度方法及系統(tǒng)的制作方法

      文檔序號:6555577閱讀:209來源:國知局
      專利名稱:一種應(yīng)用進(jìn)程的流程調(diào)度方法及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)系統(tǒng)的程序執(zhí)行,特別是涉及一種多個(gè)應(yīng)用進(jìn)程按照預(yù) 定義流程進(jìn)行調(diào)度的方法及系統(tǒng)。
      背景技術(shù)
      Unix (或Linux )是一個(gè)多用戶、多任務(wù)的操作系統(tǒng),在同一個(gè)時(shí)間內(nèi), 可以有多個(gè)進(jìn)程同時(shí)執(zhí)行。進(jìn)程是系統(tǒng)程序或應(yīng)用程序在內(nèi)存中的 一次運(yùn)行, 是操作系統(tǒng)當(dāng)前運(yùn)行的執(zhí)行程序。進(jìn)程和程序并不——對應(yīng), 一個(gè)程序可以作 為多個(gè)進(jìn)程執(zhí)行。在現(xiàn)有Unix系統(tǒng)下,進(jìn)程調(diào)度是通過系統(tǒng)調(diào)用來實(shí)現(xiàn)的。 操作系統(tǒng)的進(jìn)程調(diào)度,主要是實(shí)現(xiàn)按照優(yōu)先級對每個(gè)進(jìn)程進(jìn)行分時(shí)間片的調(diào) 度,以便對資源(主要是CPU)進(jìn)行共享。
      應(yīng)用進(jìn)程的流程調(diào)度(以下簡稱應(yīng)用流程)是指多個(gè)應(yīng)用進(jìn)程按照預(yù)定義 流程,進(jìn)行調(diào)度執(zhí)行。其中,所述應(yīng)用進(jìn)程為執(zhí)行應(yīng)用程序的進(jìn)程;所述預(yù)定 義流程為實(shí)現(xiàn)特定應(yīng)用服務(wù)的工作流程中,預(yù)先定義應(yīng)用進(jìn)程的執(zhí)行步驟集 合。
      操作系統(tǒng)的進(jìn)程調(diào)度,實(shí)現(xiàn)的是進(jìn)程對計(jì)算機(jī)資源的分配使用情況,并未 直接提供對應(yīng)用進(jìn)程按照預(yù)定義流程進(jìn)行調(diào)用的控制功能。在操作系統(tǒng)下直接 實(shí)現(xiàn)流程調(diào)度的方式, 一般是編寫命令腳本(shell ),但這種命令腳本的方式 存在如下缺點(diǎn)
      由于命令腳本是針對應(yīng)用流程編寫的,每個(gè)shell對應(yīng)一種調(diào)度流程,因 此只能處理使用同一調(diào)度流程的應(yīng)用進(jìn)程, 一旦流程改變,必需修改調(diào)用腳本。 這就要求使用者熟悉命令腳本,才能對應(yīng)各種應(yīng)用流程來編寫不同的腳本程 序,實(shí)現(xiàn)多個(gè)應(yīng)用進(jìn)程的流程調(diào)度管理。
      而且,對于具有一定邏輯關(guān)系的執(zhí)行步驟,步驟之間的這種邏輯關(guān)系無法 控制。其中,所述邏輯關(guān)系指前后步驟具有限制關(guān)系。例如,針對特定應(yīng)用服 務(wù)的步驟A和B的執(zhí)行順序是A和B同時(shí)開始執(zhí)行,B完成后再單獨(dú)執(zhí)行A, 采用命令腳本的方式,由于對應(yīng)用程序的進(jìn)程調(diào)度是串行方式,因此無法按照 這種預(yù)定義的流程執(zhí)行。
      此外,通常應(yīng)用程序存放在硬件的存儲介質(zhì)(如磁盤)中,搡作系統(tǒng)執(zhí)行 該應(yīng)用程序時(shí),從磁盤獲取并裝入內(nèi)存運(yùn)行。采用命令腳本的方式,應(yīng)用程序
      被裝入內(nèi)存后會立即執(zhí)行,因此對千需要串行處理的應(yīng)用程序,如A和B, B 需要在A后執(zhí)行,只能先將應(yīng)用程序A從磁盤上啟動并裝入內(nèi)存,運(yùn)行完畢后 再將應(yīng)用程序B裝入內(nèi)存執(zhí)行。在應(yīng)用程序B裝入內(nèi)存的過程中,CPU需要等 待裝入后才能運(yùn)行,這種處理方式造成IO操作期間的CPU處理空閑,對系統(tǒng)
      的性能帶來較大影響。
      總之,Unix (或Linux)環(huán)境下應(yīng)用進(jìn)程的流程調(diào)度,使用命令腳本的方 式實(shí)現(xiàn)針對不同應(yīng)用服務(wù)的多種調(diào)度十分困難,因此現(xiàn)有技術(shù)下的流程調(diào)度方 法具有很大的局限性。

      發(fā)明內(nèi)容
      本發(fā)明所要解決的技術(shù)問題是提供一種應(yīng)用進(jìn)程的流程調(diào)度方法及系統(tǒng), 以解決Unix (或Linux )環(huán)境下采用命令腳本方式實(shí)現(xiàn)的流程調(diào)度方法單一、 無法按照預(yù)定義流程滿足多種應(yīng)用進(jìn)程調(diào)度的問題。
      為解決上述技術(shù)問題,本發(fā)明提供了一種應(yīng)用進(jìn)程的流程調(diào)度方法,設(shè)置 流程調(diào)度服務(wù)程序,包括
      讀取預(yù)定義服務(wù)進(jìn)程配置信息;
      創(chuàng)建輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列; 逐條讀取單步預(yù)定義流程控制信息,執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入
      消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取輸出消息隊(duì)列。
      其中,所述輸出消息隊(duì)列是唯一的公共輸出消息隊(duì)列,所述輸入消息隊(duì)列
      分別對應(yīng)不同服務(wù)。
      其中,所述輸入消息隊(duì)列對應(yīng)不同服務(wù),分配不同應(yīng)用進(jìn)程數(shù)。 還包括讀取輸入消息隊(duì)列,調(diào)度分配的應(yīng)用進(jìn)程執(zhí)行,并將執(zhí)行結(jié)果寫
      入公共的輸出消息隊(duì)列。
      其中,執(zhí)行所述流程調(diào)度服務(wù)程序的進(jìn)程接收與調(diào)用請求數(shù)量相等的異步
      調(diào)用返回后,才能轉(zhuǎn)入下一單步預(yù)定義流程。
      其中,執(zhí)行所述流程調(diào)度服務(wù)程序的進(jìn)程接收同步調(diào)用返回后,才能轉(zhuǎn)入 下一單步預(yù)定義流程。
      其中,所述預(yù)定義服務(wù)進(jìn)程配置信息及預(yù)定義流程控制信息在數(shù)據(jù)庫表中 配置,所述預(yù)定義服務(wù)進(jìn)程配置信息包括服務(wù)標(biāo)識、程序文件名、消息隊(duì)列參 者文件、配置進(jìn)程數(shù),所速預(yù)定義流程控制信息包括請求標(biāo)識、服務(wù)標(biāo)識、步 驟序號、調(diào)用參數(shù)、多進(jìn)程分工標(biāo)識、發(fā)送方式(同步/異步)、超時(shí)秒數(shù)。
      還包括偵聽服務(wù)請求,若收到所述服務(wù)請求,則進(jìn)行流程調(diào)度;否則處 于等待狀態(tài)。
      優(yōu)選的,所述偵聽方式為TCP/IP方式。 還包括單獨(dú)設(shè)置所述單步預(yù)定義流程步驟的超時(shí)時(shí)間。 還包括設(shè)置所述流程調(diào)度服務(wù)程序與應(yīng)用程序的接口函數(shù)。 其中,所述接口函數(shù)包括調(diào)度初始化函數(shù)
      檢查調(diào)用的輸入消息隊(duì)列是否就緒,若是則記錄消息隊(duì)列號,否則出錯(cuò)返
      回;
      創(chuàng)建常駐內(nèi)存的應(yīng)用進(jìn)程;
      對輸入消息隊(duì)列進(jìn)行輪詢,若接收到所述流程調(diào)度服務(wù)進(jìn)程的調(diào)用請求, 則調(diào)用對應(yīng)應(yīng)用程序功能函數(shù);
      將執(zhí)行結(jié)果寫入公共輸出消息隊(duì)列,響應(yīng)所述流程調(diào)度服務(wù)進(jìn)程的調(diào)用返回。
      其中,所述接口函數(shù)還包括服務(wù)終止函數(shù)。 本發(fā)明還提供了一種應(yīng)用進(jìn)程的流程調(diào)度系統(tǒng),包括 存儲單元,用于存儲預(yù)定義流程配置參數(shù);
      控制單元,用于讀取所述存儲單元存放的預(yù)定義服務(wù)進(jìn)程配置信息;創(chuàng)建 公共輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列;
      執(zhí)行單元,用于逐條讀取所述存儲單元存放的單步預(yù)定義流程控制信息, 執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取公共輸出
      消息隊(duì)列。
      其中,所述預(yù)定義流程配置參數(shù)包括預(yù)定義服務(wù)進(jìn)程配置信息及單步預(yù)定 義流程控制信息。
      還包括偵聽單元,用于偵聽服務(wù)請求,若收到所述服務(wù)請求,則所述執(zhí) 行單元進(jìn)行流程調(diào)度;否則處于等待狀態(tài)。 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)
      首先,經(jīng)過編碼改造,設(shè)置流程調(diào)度服務(wù)程序,通過在數(shù)據(jù)庫表中預(yù)先配
      置流程控制參數(shù),并配合消息隊(duì)列機(jī)制,實(shí)現(xiàn)了 Unix (或Linux )環(huán)境下多個(gè) 進(jìn)程按照預(yù)定義流程進(jìn)行單進(jìn)程/多進(jìn)程、同步/異步組合調(diào)度的控制功能。這 種組合調(diào)用能夠根據(jù)不同的調(diào)度流程,預(yù)先定義流程配置信息,執(zhí)行流程調(diào)度 服務(wù)進(jìn)程,從而滿足多種調(diào)用流程;而且在多個(gè)進(jìn)程的調(diào)度中,由于采用了消 息隊(duì)列控制機(jī)制,對于具有邏輯關(guān)系的執(zhí)行步驟,可以通過單進(jìn)程/多進(jìn)程、
      合調(diào)度能夠控制進(jìn)程的執(zhí)行,因此實(shí)現(xiàn)了將多個(gè)應(yīng)用程序事先同時(shí)從磁盤啟動 裝入內(nèi)存的方式,在需要調(diào)度時(shí)直接從內(nèi)存調(diào)度執(zhí)行,避免了 IO操作期間的 CPU處理空閑,提高了系統(tǒng)的執(zhí)行效率。
      其次,同一功能的應(yīng)用程序可以部署多個(gè)進(jìn)程,通過消息隊(duì)列實(shí)現(xiàn)進(jìn)程的 并發(fā)調(diào)度,提高處理效率。由于服務(wù)處理時(shí)間遠(yuǎn)大于對消息隊(duì)列的掃描時(shí)間, 因此實(shí)現(xiàn)了負(fù)載均衡的功能。
      再次,由于進(jìn)程數(shù)的配置在預(yù)定義流程時(shí)通過參數(shù)指定,因此部署進(jìn)程數(shù) 可以根據(jù)系統(tǒng)資源的使用情況進(jìn)行配置,實(shí)現(xiàn)了流量控制功能。
      再次,本發(fā)明提供了流程調(diào)度服務(wù)程序與應(yīng)用服務(wù)程序的應(yīng)用程序接口 (API)函數(shù)。通過API函數(shù)方式,應(yīng)用服務(wù)程序不需要關(guān)心進(jìn)程調(diào)度過程, 即對應(yīng)用服務(wù)程序是透明的。而且,API函數(shù)中僅有調(diào)度初始化一個(gè)函數(shù)是必 選的,方便應(yīng)用程序編程,極大提高了開發(fā)效率。


      圖1是本發(fā)明所述調(diào)度方法的進(jìn)程調(diào)度原理示意圖; 圖2是本發(fā)明所述同步/異步調(diào)用組合的流程圖; 圖3是本發(fā)明所述流程調(diào)度服務(wù)的步驟流程圖; 圖4是本發(fā)明所述調(diào)度初始化API函數(shù)的流程示意圖; 圖5是本發(fā)明所述應(yīng)用進(jìn)程的流程調(diào)度系統(tǒng)框圖。
      具體實(shí)施例方式
      為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
      對本發(fā)明作進(jìn)一步詳細(xì)的說明。
      本發(fā)明的核心思想是技術(shù)實(shí)現(xiàn)基于兩部分,流程調(diào)度服務(wù)(及其配置參 數(shù))和應(yīng)用程序接口 (API)函數(shù)。通過在數(shù)據(jù)庫表中配置參數(shù)數(shù)據(jù)的方式實(shí) 現(xiàn)流程預(yù)定義,應(yīng)用服務(wù)進(jìn)程間的通訊采用消息隊(duì)列,所有服務(wù)由流程調(diào)度服 務(wù)進(jìn)程按照所述預(yù)定義流程進(jìn)行統(tǒng)一調(diào)度;通過應(yīng)用服務(wù)程序與所述流程調(diào)度 服務(wù)程序間的接口 (API)函數(shù)的實(shí)現(xiàn),應(yīng)用服務(wù)程序只需將相關(guān)參數(shù)傳入所 述API函數(shù),即可實(shí)現(xiàn)預(yù)定義流程的調(diào)度執(zhí)行,而不需要關(guān)心進(jìn)程調(diào)度過程。
      本發(fā)明實(shí)現(xiàn)了多個(gè)應(yīng)用進(jìn)程按照預(yù)定義流程進(jìn)行單進(jìn)程/多進(jìn)程、同步/ 異步組合調(diào)度的控制功能。其中,所述流程預(yù)定義通過在數(shù)據(jù)庫表中配置參數(shù) 數(shù)據(jù)的方式實(shí)現(xiàn),包括服務(wù)進(jìn)程配置信息和流程控制信息所述服務(wù)進(jìn)程配置 信息包括服務(wù)標(biāo)識、程序文件名、消息隊(duì)列參考文件、配置進(jìn)程數(shù)等,所述流 程控制信息包括請求標(biāo)識、服務(wù)標(biāo)識、步驟序號、調(diào)用參數(shù)、多進(jìn)程分工標(biāo)識、 發(fā)送方式(同步/異步)、超時(shí)秒數(shù)等內(nèi)容。流程預(yù)定義可由最終用戶或服務(wù)程 序開發(fā)方進(jìn)行配置。
      所述單進(jìn)程/多進(jìn)程調(diào)用屬于本發(fā)明實(shí)現(xiàn)的功能。單進(jìn)程調(diào)用為同一服務(wù) 只部署一個(gè)進(jìn)程,只有一個(gè)進(jìn)程響應(yīng)該服務(wù);多進(jìn)程調(diào)用為同一服務(wù)部署多個(gè)
      進(jìn)程,將同一服務(wù)分成多個(gè)請求同時(shí)發(fā)出,有多個(gè)進(jìn)程響應(yīng)該服務(wù)。單進(jìn)程/ 多進(jìn)程規(guī)則屬于預(yù)定義流程的策略,采取多進(jìn)程策略一般是為了在系統(tǒng)資源許 可的條件下進(jìn)行并發(fā)調(diào)度,盡可能提高處理效率及性能。由于多個(gè)進(jìn)程協(xié)同處 理同一服務(wù),因此必須對同一服務(wù)內(nèi)容進(jìn)行"分工",分工方法根據(jù)不同服務(wù) 有不同的方法,不管哪一種方法,都需要在調(diào)用時(shí)指定"多進(jìn)程分工標(biāo)識"參 數(shù),以便多個(gè)進(jìn)程正確進(jìn)行"分工"。
      所述同步/異步調(diào)用也屬于本發(fā)明實(shí)現(xiàn)的功能。同步調(diào)用為同一時(shí)間只能
      發(fā)起一次調(diào)用,待該調(diào)用返回后,才能進(jìn)行下一次調(diào)用;異步調(diào)用為發(fā)出一次 調(diào)用后,不等待返回即可再次發(fā)出調(diào)用,即相當(dāng)于同一時(shí)間可以發(fā)出多個(gè)調(diào)用。 同步/異步規(guī)則屬于預(yù)定義流程的策略, 一般來說,存在嚴(yán)格先后邏輯關(guān)系的 服務(wù)采用同步調(diào)用,前后步驟沒有限制關(guān)系時(shí),可以進(jìn)行異步調(diào)用。異步調(diào)用 可以同時(shí)發(fā)起多個(gè)調(diào)用,多進(jìn)程方式下只能釆用異步調(diào)用。系統(tǒng)同時(shí)支持"接 收異步返回"功能,用于控制異步調(diào)用后續(xù)步驟的同步調(diào)用。
      本發(fā)明中,同一功能的應(yīng)用進(jìn)程可以部署多個(gè),以進(jìn)行并發(fā)調(diào)度,提高處
      理效率。前后步驟沒有限制關(guān)系時(shí),可以進(jìn)行異步調(diào)用,否則可以進(jìn)行同步調(diào) 用。不管同步或者異步調(diào)用,每個(gè)步驟可單獨(dú)設(shè)置超時(shí)時(shí)間,如果某一個(gè)步驟 超時(shí),則整個(gè)流程中止,并設(shè)置錯(cuò)誤碼為"流程執(zhí)行超時(shí)"。由子超時(shí)時(shí)間是 設(shè)置在單個(gè)的步驟上,因此超時(shí)控制粒度相當(dāng)細(xì),能夠滿足大多數(shù)情況下的需求。
      參照圖1,是本發(fā)明所述調(diào)度方法的進(jìn)程調(diào)度原理示意圖。圖中procMan (process Manager) 101為流程調(diào)度服務(wù)進(jìn)程,是執(zhí)行流程調(diào)度服務(wù)程序的 進(jìn)程,是本發(fā)明設(shè)置的核心進(jìn)程,只需要啟動本進(jìn)程即可自動將流程中定義的 所有應(yīng)用進(jìn)程啟動起來。
      進(jìn)程102用字母P表示,如圖P 、 P,2為實(shí)現(xiàn)同一服務(wù)功能的應(yīng)用程序1 的2個(gè)副本進(jìn)程;P21、 P,,,為實(shí)現(xiàn)不同服務(wù)功能的應(yīng)用程序2和應(yīng)用程序n的 進(jìn)程。下標(biāo)第l位相同表示同一功能應(yīng)用的不同進(jìn)程副本,下標(biāo)第l位不同即 表示不同功能應(yīng)用的不同進(jìn)程副本。圖中,應(yīng)用程序1配置了兩個(gè)進(jìn)程,因此 可以兩個(gè)進(jìn)程并發(fā)處理,提高單步處理性能。應(yīng)用程序2和應(yīng)用程序n分別僅 配置了 1個(gè)進(jìn)程,無需或者不能并發(fā)處理。所述針對不同服務(wù)功能的進(jìn)程數(shù)配 置,根據(jù)系統(tǒng)資源使用情況,在預(yù)定義流程時(shí)通過參數(shù)指定,實(shí)現(xiàn)了流量控制 功能。
      對除流程調(diào)度服務(wù)101外的其他服務(wù)而言,通知流程調(diào)度的消息隊(duì)列稱為 輸出消息隊(duì)列,從流程調(diào)度接收的消息隊(duì)列稱為輸入消息隊(duì)列。本發(fā)明中,系 統(tǒng)為除流程調(diào)度服務(wù)101外的其他同一組服務(wù)設(shè)置一個(gè)輸入消息隊(duì)列,多組服 務(wù)各自設(shè)置不同的輸入消息隊(duì)列,所有服務(wù)設(shè)置同一個(gè)公共輸出消息隊(duì)列。圖 中,Q"、 Qn、 (^為不同應(yīng)用服務(wù)的輸入消息隊(duì)列103。同一應(yīng)用服務(wù)的一組進(jìn) 程(例如Ph和P,2)使用同一個(gè)輸入消息隊(duì)列,不同應(yīng)用服務(wù)的進(jìn)程使用不同 的輸入消息隊(duì)列。多進(jìn)程時(shí),procMan從預(yù)定義配置參數(shù)獲得多進(jìn)程標(biāo)識轉(zhuǎn)發(fā) 給被調(diào)用的服務(wù)進(jìn)程,該標(biāo)識用于同一服務(wù)多個(gè)進(jìn)程之間實(shí)現(xiàn)分工。Q。為除流 程調(diào)度服務(wù)procMan以外的所有應(yīng)用進(jìn)程共用的公共輸出消息隊(duì)列104。系統(tǒng) 中只需要一個(gè)公共輸出消息隊(duì)列。所有進(jìn)程都將輸出消息寫入該隊(duì)列,流程調(diào) 度服務(wù)從該隊(duì)列讀取服務(wù)調(diào)用返回。
      圖1所示的調(diào)度流程為,流程調(diào)度服務(wù)procMan需要調(diào)用應(yīng)用服務(wù)1時(shí),
      在其對應(yīng)的輸入消息隊(duì)列Qu中寫入消息,該服務(wù)部署兩個(gè)進(jìn)程Pu和Pu,兩個(gè) 進(jìn)程中的空閑進(jìn)程Pu (也可能是Pu)隨機(jī)獲得這條消息并進(jìn)行處理。由于服 務(wù)處理時(shí)間遠(yuǎn)大子對消息隊(duì)列的掃描時(shí)間,因此可以做到負(fù)栽均街。P12 (也可
      能是P,,)進(jìn)程處理完成后,將完成消息寫入到公共輸出消息隊(duì)列Q。中。流程
      調(diào)度服務(wù)通過掃描該消息隊(duì)列獲得應(yīng)用服務(wù)完成情況。
      按照上述方法,如調(diào)用的是應(yīng)用服務(wù)2,則將請求消息寫入消息隊(duì)列P21 中,但完成情況仍然從Q。中讀取。每個(gè)進(jìn)程將自身的進(jìn)程標(biāo)識ID作為消息類 型返回,由于進(jìn)程標(biāo)識ID在操作系統(tǒng)中一段時(shí)間內(nèi)是唯一的,而且這段時(shí)間 的長短取決于進(jìn)程變化情況,但一般遠(yuǎn)大于24小時(shí),能夠滿足大多數(shù)情況下 的服務(wù)需求,因此可以確定唯一的消息類型,從而盡管Q。是共用的,但返回 進(jìn)程仍然可以得到區(qū)分。
      上述寫入調(diào)用消息與讀出返回消息是完全獨(dú)立的兩個(gè)過程,因此,如果在 獲得步驟一的返回消息以后,再寫入步驟二的調(diào)用消息,則步驟一為"同步調(diào) 用";反之,如果寫入多個(gè)步驟一的調(diào)用消息,或者寫入步驟一的調(diào)用消息后, 不讀取返回消息,直接再寫入步驟二的調(diào)用消息,則實(shí)現(xiàn)"異步調(diào)用"。即, 通過控制調(diào)用消息的寫入條件,流程調(diào)度procMan可以實(shí)現(xiàn)對其他服務(wù)的同步 調(diào)用、異步調(diào)用、接收異步返回等功能;通過對出口消息的讀出和解析,流程 調(diào)度procMan可以實(shí)現(xiàn)請求流量控制和負(fù)載均衡,從而實(shí)現(xiàn)在Unix ( Linux )
      環(huán)境下對應(yīng)用進(jìn)程的組合調(diào)度。
      參照圖2,是本發(fā)明所述同步/異步調(diào)用組合的流程圖,圖中表示了同步/ 異步調(diào)用組合比較常見的一種情形,執(zhí)行步驟如下
      步驟201,異步調(diào)用流程調(diào)度procMan發(fā)出多個(gè)(假定為10個(gè))服務(wù)1 的請求,服務(wù)l預(yù)配置的兩個(gè)應(yīng)用進(jìn)程Pu、 Pu分別進(jìn)行響應(yīng),在P!,處理完成
      后,又從消息隊(duì)列讀取下一個(gè)請求,對P,2同理。因此,P"和P,2之間實(shí)現(xiàn)負(fù)載
      均衡;另外,服務(wù)l進(jìn)程數(shù)量可調(diào),部署進(jìn)程數(shù)根據(jù)系統(tǒng)資源使用情況進(jìn)行配 置,實(shí)現(xiàn)了流量控制功能。
      步驟202,接收異步返回流程調(diào)度procMan接收與請求數(shù)量相等的異步
      返回,然后再轉(zhuǎn)入下一個(gè)步驟,實(shí)現(xiàn)了異步調(diào)用到同步調(diào)用的轉(zhuǎn)換。例如,流 程調(diào)度procMan從公共輸出消息隊(duì)列Q。讀取調(diào)用返回,接收到IO個(gè)異步返回后,才發(fā)出下一步驟的調(diào)用請求。
      步驟203,同步調(diào)用根據(jù)服務(wù)2的功能特性,執(zhí)行該服務(wù)的步驟之間具 有一定的邏輯限制關(guān)系,因此服務(wù)2無法進(jìn)行并衧處理,僅部署單進(jìn)程P21, 使用同步方式調(diào)用。只有在Pu返回以后,才能進(jìn)入下一個(gè)步驟。
      步驟204,同步調(diào)用根據(jù)系統(tǒng)資源的使用情況,服務(wù)3不需要進(jìn)行并行 處理,僅部署單進(jìn)程P3,,使用同步方式調(diào)用。在Pw返回以后,沒有后續(xù)步驟, 流程結(jié)束。
      本發(fā)明的完整實(shí)現(xiàn)基于兩部分流程調(diào)度服務(wù)(及其配置參數(shù))和應(yīng)用服 務(wù)程序API (Application Programming Interface應(yīng)用程序接口 )函數(shù)。
      參照圖3,是本發(fā)明所述流程調(diào)度服務(wù)的步驟流程圖。流程調(diào)度服務(wù)總體 處理流程如下
      步驟301,進(jìn)程初始化,完成環(huán)境準(zhǔn)備等工作。例如,交易流程控制表在 共享內(nèi)存中的地址初始化工作等。
      步驟302,從數(shù)據(jù)庫讀取服務(wù)進(jìn)程配置信息,包括服務(wù)標(biāo)識、程序文件 名、消息隊(duì)列參考文件、配置進(jìn)程數(shù)等。其中,所述消息隊(duì)列參考文件指用于 生成識別消息隊(duì)列的唯一鍵值。所述服務(wù)進(jìn)程配置信息可由最終用戶或應(yīng)用服
      務(wù)程序開發(fā)方預(yù)先進(jìn)行配置。
      步驟303,根據(jù)步驟302中獲得的服務(wù)進(jìn)程配置信息創(chuàng)建消息隊(duì)列。不同
      服務(wù)使用不同的輸入消息隊(duì)列,但公用同 一個(gè)公共輸出消息隊(duì)列。
      步驟304,啟動所有的服務(wù)進(jìn)程。將預(yù)定義流程中執(zhí)行的服務(wù)程序從磁盤
      全部調(diào)入內(nèi)存,在調(diào)用時(shí)直接從內(nèi)存讀取,實(shí)現(xiàn)IO操作與CPU計(jì)算的并行處
      理,提高了執(zhí)行效率。
      步驟305, TCP/IP服務(wù)請求偵聽。如果接收到服務(wù)請求,則轉(zhuǎn)入相應(yīng)的流
      程調(diào)度,否則處于等待TCP/IP服務(wù)請求狀態(tài)?,F(xiàn)有實(shí)現(xiàn)的流程調(diào)度服務(wù)通過
      TCP/IP方式接收服務(wù)請求,根據(jù)需要也可以改成數(shù)據(jù)庫輪詢、消息隊(duì)列輪詢
      等其他方式實(shí)現(xiàn)。
      步驟3Q6,接收到服務(wù)請求后,將轉(zhuǎn)入相應(yīng)的流程調(diào)度。
      步驟307,進(jìn)程調(diào)度接收到請求后,向調(diào)用者返回請求成功信息,表示開
      始處理該:清求。
      步驟308,從數(shù)據(jù)庫獲取預(yù)定義的流程控制信息。所述預(yù)定義的流程控制 信息包括請求標(biāo)識、服務(wù)標(biāo)識、步驟序號、調(diào)用參數(shù)、多進(jìn)程分工標(biāo)識、發(fā)送 方式(同步/異歩)、超時(shí)秒數(shù)等內(nèi)容。流程預(yù)定義可由最終用戶或應(yīng)用服務(wù)程 序開發(fā)方預(yù)先進(jìn)行配置。
      步驟309, 310,讀取一條流程控制信息,才艮據(jù)同步調(diào)用、異步調(diào)用、返 回調(diào)用進(jìn)行消息隊(duì)列讀或?qū)懖僮鳌H绻钦埱笳{(diào)用,則寫入對應(yīng)服務(wù)的消息隊(duì) 列通知相應(yīng)服務(wù)開始處理;如果是返回,則讀取返回消息隊(duì)列,并進(jìn)行超時(shí)控 制。如果有進(jìn)程處理失敗,則進(jìn)入錯(cuò)誤處理,終止當(dāng)前流程。
      步驟311,在數(shù)據(jù)庫中記錄或更新狀態(tài)日志。
      步驟312,循環(huán)讀取單步流程控制信息,返回步驟309。由于在預(yù)定義流 程中預(yù)先設(shè)定了步驟序號,因此當(dāng)所有預(yù)置步驟處理完后,服務(wù)請求處理結(jié)束。
      上述步驟中,所述服務(wù)進(jìn)程配置信息及流程控制信息為預(yù)定義的流程配置 參數(shù),在不同步驟獲取相關(guān)配置信息。而且,根據(jù)服務(wù)標(biāo)識的不同,流程執(zhí)行 的單步流程數(shù)量也不相同。因此本發(fā)明能夠滿足多種調(diào)用流程。
      本發(fā)明還設(shè)置了應(yīng)用程序與流程調(diào)度服務(wù)程序的接口函數(shù),通過API函數(shù) 方式,應(yīng)用服務(wù)程序不需要關(guān)心進(jìn)程調(diào)度過程,即對應(yīng)用服務(wù)程序是透明的。 所述API函數(shù)與應(yīng)用服務(wù)程序的接口包括兩個(gè)函數(shù)調(diào)度初始化 (glbQueuelnit )函數(shù)和服務(wù)終止函數(shù)。其中,所述調(diào)度初始化函數(shù)是唯—— 個(gè)應(yīng)用服務(wù)程序必須調(diào)用的API函數(shù)。如果應(yīng)用服務(wù)程序在調(diào)用調(diào)度初始化函 數(shù)時(shí),同時(shí)指定了服務(wù)終止函數(shù)(通過函數(shù)指針參數(shù)),則系統(tǒng)將在應(yīng)用服務(wù) 進(jìn)程被終止時(shí)調(diào)用服務(wù)終止函數(shù);如未指定,則執(zhí)行默認(rèn)的服務(wù)終止函數(shù),即 通過exit系統(tǒng)調(diào)用終止進(jìn)程。
      參照圖4,是本發(fā)明所述調(diào)度初始化API函數(shù)的流程示意圖。調(diào)度初始化 API函數(shù)的處理流程如下
      步驟401 - 404,;險(xiǎn)查調(diào)用的消息隊(duì)列是否就緒,包括消息隊(duì)列是否創(chuàng)建, 是否可讀寫。如未就緒,則出錯(cuò)返回,終止進(jìn)程;如就緒,則獲取并記錄消息 隊(duì)列號。步驟401,獲取公共輸出消息隊(duì)列配置參數(shù),包括消息隊(duì)列號等參數(shù); 步驟402,檢查公共輸出消息隊(duì)列是否可寫,以便應(yīng)用進(jìn)程執(zhí)行完后將結(jié)果寫 入公共輸出消息隊(duì)列。步驟403,獲取輸入消息隊(duì)列配置參數(shù),包括消息隊(duì)列
      號等參數(shù);步驟404,檢查輸入消息隊(duì)列是否可讀,以便應(yīng)用進(jìn)程從對應(yīng)輸入
      消息隊(duì)列獲取請求并執(zhí)行。
      步驟405,通過系統(tǒng)調(diào)用(fork)衍生創(chuàng)建子進(jìn)程,創(chuàng)建成功后父進(jìn)程退 出。這樣,應(yīng)用服務(wù)進(jìn)程就成為守護(hù)(daemon)進(jìn)程,常駐內(nèi)存中不間斷進(jìn)行 消息隊(duì)列輪詢并響應(yīng)請求。其中,所述fork系統(tǒng)調(diào)用的作用是復(fù)制一個(gè)進(jìn)程。 當(dāng)一個(gè)進(jìn)程調(diào)用它,完成后就出現(xiàn)兩個(gè)幾乎一模一樣的進(jìn)程,復(fù)制出來的另外 一個(gè)進(jìn)程被稱為子進(jìn)程,原來的進(jìn)程稱為父進(jìn)程。所述守護(hù)進(jìn)程是生存期較長 的一種進(jìn)程,它們獨(dú)立于控制終端,并且周期性地執(zhí)行某種任務(wù)或等待處理某 些發(fā)生的事件。他們常常在系統(tǒng)引導(dǎo)裝入時(shí)啟動,在系統(tǒng)關(guān)閉時(shí)終止。Unix 系統(tǒng)有很多守護(hù)進(jìn)程,大多數(shù)基于Unix (或Linux )操作系統(tǒng)的服務(wù)器功能都 是用守護(hù)進(jìn)程實(shí)現(xiàn)的,比如網(wǎng)絡(luò)服務(wù)inetd、 Web服務(wù)http等。同時(shí),許多系 統(tǒng)任務(wù)也是由系統(tǒng)的守護(hù)進(jìn)程完成,比如作業(yè)規(guī)劃進(jìn)程crond、打印進(jìn)程lqd 等。
      步驟406 - 407,對消息隊(duì)列進(jìn)行輪詢,如接收到消息,即procMan發(fā)出 調(diào)用請求,向?qū)?yīng)輸入消息隊(duì)列寫入消息請求,則執(zhí)行步驟407,從該輸入消 息隊(duì)列讀取消息,調(diào)用本函數(shù)入口參數(shù)函數(shù)指針中指定的應(yīng)用函數(shù);否則繼續(xù)
      輪詢消息隊(duì)列。
      步驟408,應(yīng)用函數(shù)返回后,在公共輸出消息隊(duì)列中寫入返回信息。procMan 通過調(diào)用返回,讀取公共輸出消息隊(duì)列。返回步驟406,繼續(xù)對消息隊(duì)列進(jìn)行輪詢。
      API函數(shù)中僅有調(diào)度初始化是必選,方便應(yīng)用進(jìn)程編程,極大提高了開發(fā) 效率。以下實(shí)施例是本發(fā)明中API函數(shù)的使用范例
      調(diào)度初始化glbQueuelnit的C語言函凄t原型int glbQueuelnit (char *myld, int(*myFunc) (SVC一MSG—IN —DEF *svcMsgIn), void (*termFunc)())
      應(yīng)用服務(wù)程序myA卯在main函數(shù)中調(diào)用調(diào)度初始化glbQueuelnit函數(shù), 編寫^yFunc指定的函數(shù)處理服務(wù)請求。如需在服務(wù)進(jìn)程中止時(shí)處理其他事 務(wù),可指定nermFunc,否則參數(shù)用NULL。完整的調(diào)用范例如下
      /*應(yīng)用服務(wù)程序myApp范例*/
      /*定義myApp的月良務(wù)標(biāo)識,以i"更流程調(diào)度procMan進(jìn)4亍月良務(wù)調(diào)度*/ #define MYAPP—ID "1001"
      /*完成應(yīng)用"l務(wù)^^碼*/ int myApp(char *buf)
      /*服務(wù)處理代碼*/
      /*進(jìn)程終止時(shí)調(diào)用*/ int mySvcTerm (void) {
      /*服務(wù)中止時(shí)處理代碼,例如斷開數(shù)據(jù)庫連接等*/ }
      /*主函lt入口 */
      int main(int argc, char *argv[])
      /*初始化代碼,例如數(shù)據(jù)庫連接等*/ glbQueuelnit (MYAPP—ID, myApp, mySvcTerm);
      范例中調(diào)度初始化glbQueuelnit函數(shù)傳入三個(gè)參數(shù),第一個(gè)MYAPP—ID 參數(shù)是myApp的服務(wù)標(biāo)識,用于流程調(diào)度服務(wù)procMan對該服務(wù)的識別和調(diào)用; 第二個(gè)myA卯參數(shù)是函數(shù)指針myApp,指向?qū)崿F(xiàn)該服務(wù)功能的函數(shù),由應(yīng)用開 發(fā)人員編寫;第三個(gè)mySvcTerm參數(shù)是函數(shù)指針mySvcTerm,指向進(jìn)程終止時(shí) 需要處理內(nèi)容的函數(shù),即服務(wù)中止函數(shù),也是由應(yīng)用開發(fā)人員編寫,如不需要, 可以傳入空(冊LL)參數(shù)。
      在上述應(yīng)用服務(wù)程序myApp中,通過glbQueuelnit函數(shù)實(shí)現(xiàn)了應(yīng)用進(jìn)程 的流程調(diào)度,但對于myApp程序,并不知道具體的調(diào)度流程是如何執(zhí)行的,只 雷傳入?yún)?shù),通過glbQueuelnit接口函數(shù)執(zhí)衧流程調(diào)度服務(wù)進(jìn)程,完成相應(yīng) 服務(wù)處理。
      對應(yīng)所述應(yīng)用進(jìn)程的流程調(diào)度方法,本發(fā)明還提供了 一種應(yīng)用進(jìn)程的流程 調(diào)度系統(tǒng)。參照圖5是本發(fā)明所述應(yīng)用進(jìn)程的流程調(diào)度系統(tǒng)框圖。所述系統(tǒng)包 括
      存儲單元5Q1,用于存儲預(yù)定義流程配置參數(shù),所述預(yù)定義流程配置參數(shù) 包括預(yù)定義服務(wù)進(jìn)程配置信息及單步預(yù)定義流程控制信息。;
      控制單元502,用于讀取所述存儲單元501存放的預(yù)定義服務(wù)進(jìn)程配置信 息;創(chuàng)建公共輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列;
      執(zhí)行單元503,用于逐條讀取所述存儲單元501存放的單步預(yù)定義流程控 制信息,執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取 公共輸出消息隊(duì)列。
      偵聽單元504,用于偵聽服務(wù)請求,若收到所述服務(wù)請求,則所述執(zhí)行單 元503進(jìn)行流程調(diào)度;否則處于等待狀態(tài)。
      綜上所述,本發(fā)明實(shí)現(xiàn)了 Unix環(huán)境下按照預(yù)定義流程對多個(gè)應(yīng)用進(jìn)程進(jìn) 行單進(jìn)程/多進(jìn)程、同步/異步的組合調(diào)度。采用消息隊(duì)列和多進(jìn)程調(diào)度實(shí)現(xiàn)了 負(fù)載均衡的功能;在流程預(yù)定義中設(shè)置進(jìn)程數(shù)實(shí)現(xiàn)了流量控制功能;通過API 函數(shù)方式,應(yīng)用服務(wù)程序不需要關(guān)心進(jìn)程調(diào)度過程,即對應(yīng)用服務(wù)程序是透明 的。API函數(shù)中僅有調(diào)度初始化一個(gè)函數(shù)是必選的,方便應(yīng)用程序編程,極大
      提高了開發(fā)效率。經(jīng)過編碼改造,本發(fā)明所述方法及系統(tǒng)適用于其他提供消息 隊(duì)列和進(jìn)程系統(tǒng)調(diào)用的操作系統(tǒng),如Un i x系統(tǒng)和其他類Un i x系統(tǒng)(1 inux )。
      以上對本發(fā)明所提供的 一 種應(yīng)用進(jìn)程的流程調(diào)度方法及系統(tǒng)
      述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí), 對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
      及應(yīng)用范圍 上均會有改變之處。綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
      權(quán)利要求
      1、一種應(yīng)用進(jìn)程的流程調(diào)度方法,其特征在于,設(shè)置流程調(diào)度服務(wù)程序,包括讀取預(yù)定義服務(wù)進(jìn)程配置信息;創(chuàng)建輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列;逐條讀取單步預(yù)定義流程控制信息,執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取輸出消息隊(duì)列。
      2、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于所述輸出消息隊(duì)列是 唯一的公共輸出消息隊(duì)列,所述輸入消息隊(duì)列分別對應(yīng)不同服務(wù)。
      3、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于所述輸入消息隊(duì)列對 應(yīng)不同服務(wù),分配不同應(yīng)用進(jìn)程數(shù)。
      4、 根據(jù)權(quán)利要求l、 2或3所述的調(diào)度方法,其特征在于,還包括讀取 輸入消息隊(duì)列,調(diào)度分配的應(yīng)用進(jìn)程執(zhí)行,并將執(zhí)行結(jié)果寫入公共輸出消息隊(duì) 列。
      5、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于執(zhí)行所述流程調(diào)度服 務(wù)程序的進(jìn)程接收與調(diào)用請求數(shù)量相等的異步調(diào)用返回后,才能轉(zhuǎn)入下一單步 預(yù)定義流程。
      6、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于執(zhí)行所述流程調(diào)度服 務(wù)程序的進(jìn)程接收同步調(diào)用返回后,才能轉(zhuǎn)入下一單步預(yù)定義流程。
      7、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于所述預(yù)定義服務(wù)進(jìn)程 配置信息及預(yù)定義流程控制信息在數(shù)據(jù)庫表中配置,所述預(yù)定義服務(wù)進(jìn)程配置 信息包括服務(wù)標(biāo)識、程序文件名、消息隊(duì)列參考文件、配置進(jìn)程數(shù),所述預(yù)定 義流程控制信息包括請求標(biāo)識、服務(wù)標(biāo)識、步驟序號、調(diào)用參數(shù)、多進(jìn)程分工 標(biāo)識、發(fā)送方式(同步/異步)、超時(shí)秒數(shù)。
      8、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于,還包括偵聽服務(wù)請 求,若收到所述服務(wù)請求,則進(jìn)行流程調(diào)度;否則處于等待狀態(tài)。
      9、 根據(jù)權(quán)利要求8所述的調(diào)度方法,其特征在于所述偵聽方式為TCP/IP方式。
      10、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于,還包括單獨(dú)設(shè)置所 述單步預(yù)定義流程步驟的超時(shí)時(shí)間。
      11、 根據(jù)權(quán)利要求1所述的調(diào)度方法,其特征在于,還包括設(shè)置所述流程調(diào)度服務(wù)程序與應(yīng)用程序的接口函數(shù)。
      12、 根據(jù)權(quán)利要求11所述的調(diào)度方法,其特征在于,所述接口函數(shù)包括 調(diào)度初始化函數(shù)檢查調(diào)用的輸入消息隊(duì)列是否就緒,若是則記錄消息隊(duì)列號,否則出錯(cuò)返回;創(chuàng)建常駐內(nèi)存的應(yīng)用進(jìn)程;對輸入消息隊(duì)列進(jìn)行輪詢,若接收到所述流程調(diào)度服務(wù)進(jìn)程的調(diào)用請求, 則調(diào)用對應(yīng)應(yīng)用程序功能函數(shù);將執(zhí)行結(jié)果寫入公共輸出消息隊(duì)列,響應(yīng)所述流程調(diào)度服務(wù)進(jìn)程的調(diào)用返回。
      13、 根據(jù)權(quán)利要求11所述的調(diào)度方法,其特征在于所述接口函數(shù)還包 括服務(wù)終止函數(shù)。
      14、 一種應(yīng)用進(jìn)程的流程調(diào)度系統(tǒng),其特征在于,包括 存儲單元,用于存儲預(yù)定義流程配置參數(shù);控制單元,用于讀取所述存儲單元存放的預(yù)定義服務(wù)進(jìn)程配置信息;創(chuàng)建 公共輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列;執(zhí)行單元,用于逐條讀取所述存儲單元存放的單步預(yù)定義流程控制信息, 執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取公共輸出消息隊(duì)列。
      15、 根據(jù)權(quán)利要求14所述的調(diào)度系統(tǒng),其特征在于所述預(yù)定義流程配 置參數(shù)包括預(yù)定義服務(wù)進(jìn)程配置信息及單步預(yù)定義流程控制信息。
      16、 根據(jù)權(quán)利要求14所述的調(diào)度系統(tǒng),其特征在于,還包括偵聽單元, 用于偵聽服務(wù)請求,若收到所述服務(wù)請求,則所述執(zhí)行單元進(jìn)行流程調(diào)度;否 則處于等待狀態(tài)。
      全文摘要
      本發(fā)明公開了一種應(yīng)用進(jìn)程的流程調(diào)度方法及系統(tǒng),以解決Unix(Linux)環(huán)境下采用命令腳本方式實(shí)現(xiàn)的流程調(diào)度方法單一、無法按照預(yù)定義流程滿足多種應(yīng)用進(jìn)程調(diào)度的問題。所述方法設(shè)置流程調(diào)度服務(wù)程序,包括讀取預(yù)定義服務(wù)進(jìn)程配置信息;創(chuàng)建輸出消息隊(duì)列及與所述服務(wù)進(jìn)程配置信息對應(yīng)的輸入消息隊(duì)列;逐條讀取單步預(yù)定義流程控制信息,執(zhí)行調(diào)用請求時(shí)寫入對應(yīng)服務(wù)的輸入消息隊(duì)列,執(zhí)行調(diào)用返回時(shí)讀取輸出消息隊(duì)列。還包括設(shè)置流程調(diào)度服務(wù)程序與應(yīng)用程序的接口函數(shù),方便應(yīng)用程序編程,極大提高了開發(fā)效率。本發(fā)明實(shí)現(xiàn)了Unix(Linux)環(huán)境下按照預(yù)定義流程對多個(gè)應(yīng)用進(jìn)程進(jìn)行單進(jìn)程/多進(jìn)程、同步/異步的組合調(diào)度,實(shí)現(xiàn)了負(fù)載均衡和流量控制功能。
      文檔編號G06F9/46GK101097527SQ20061002850
      公開日2008年1月2日 申請日期2006年6月27日 優(yōu)先權(quán)日2006年6月27日
      發(fā)明者陳逢源 申請人:中國銀聯(lián)股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1