專利名稱:多線程數(shù)據(jù)同步方法及裝置的制作方法
技術領域:
本發(fā)明涉及通信領域,具體而言,涉及一種多線程數(shù)據(jù)同步方法及裝置。
技術背景
在無線通信中,網管系統(tǒng)(NMS)主要負責對網元設備(NE)進行管理,網管系 統(tǒng)進一步包括配置管理模塊、性能管理模塊、告警管理模塊等。其中,配置管理模塊 是網管系統(tǒng)中最重要的模塊之一,負責網元的數(shù)據(jù)設置。在配置管理模塊中,配置好的 數(shù)據(jù)需要從NMS發(fā)送到網元設備,這就需要建立網元設備和網管系統(tǒng)的連接并進行數(shù)據(jù) 同步。利用數(shù)據(jù)同步技術可以實現(xiàn)不同數(shù)據(jù)庫之間的數(shù)據(jù)交換,并確保所有數(shù)據(jù)庫中數(shù) 據(jù)的一致性。
目前,數(shù)據(jù)同步技術主要從降低系統(tǒng)與網絡資源消耗、提高同步效率和保證同 步數(shù)據(jù)正確性等方面考慮,其中,提高同步效率最主要的方法就是使用多線程并發(fā)技 術,可以在同一時間內對多個網元進行數(shù)據(jù)同步。如圖1所示,數(shù)據(jù)同步方法的主要步 驟如下
1、將所有要同步的網元信息插入一個同步任務隊列,其中,上述網元信息主要 包括網元ID,網元類型等參數(shù);
2、同時啟動多個線程;
3、每個線程不斷的從同步任務隊列中獲取網元信息,獲取之后從同步任務隊列 中刪除該網元;
4、線程根據(jù)網元信息,開始執(zhí)行該類型網元對應的同步狀態(tài),如果遇到狀態(tài)機 的某個狀態(tài)需要等待前臺網元返回消息,則線程等待消息返回后繼續(xù)執(zhí)行;
5、線程執(zhí)行到狀態(tài)機的最后一個狀態(tài)后,則一個同步任務執(zhí)行完畢,該線程重 新去查詢同步任務隊列,獲取網元信息執(zhí)行下一個同步任務。
此種同步方法是將多線程應用于數(shù)據(jù)同步的典型方法。通過增加了多個線程, 每個線程執(zhí)行一個同步狀態(tài)機,每個狀態(tài)機對應一個同步任務,這種方法雖然提高了同 步效率,但是經過分析可以發(fā)現(xiàn)線程的利用率并不高。一般來說,原數(shù)據(jù)源與目標數(shù)據(jù) 源的同步過程并不是簡單的數(shù)據(jù)拷貝,從原數(shù)據(jù)源得到的數(shù)據(jù)還要經過一定的處理與再 加工才能配置到目標數(shù)據(jù)源,因此一般的同步流程要分為多個階段,每個階段原數(shù)據(jù)源 與目標數(shù)據(jù)源都有不同的交互應答消息以決定下一步應該執(zhí)行的操作或動作。由于原 數(shù)據(jù)源與目標數(shù)據(jù)源一般都處于不同的物理平臺,相互之間的應答消息相對來說比較耗 時,經過跟蹤狀態(tài)機的執(zhí)行過程可以發(fā)現(xiàn)線程80%以上的時間都是在等待前臺網元返回 消息,此時如果同步任務隊列中還有多個基站需要同步,那么線程的等待完全是沒有效 率的。發(fā)明內容
針對相關技術中線程80%以上的時間都是在等待前臺網元返回消息,導致線程不高的問題,本發(fā)明旨在提供一種多線程數(shù)據(jù)同步方法及裝置,以解決上述問 題至少之一。
根據(jù)本發(fā)明的一個方面,提供了一種多線程數(shù)據(jù)同步方法。
根據(jù)本發(fā)明的多線程數(shù)據(jù)同步方法包括多線程池中的線程從同步隊列中取出 待同步網元對應的同步狀態(tài)機的狀態(tài)并執(zhí)行;在取出的狀態(tài)需要等待前臺網元返回消息 時,線程將取出的狀態(tài)保存在存儲模塊中,并重新從同步隊列中取出可用狀態(tài)并執(zhí)行; 當取出的狀態(tài)對應的網元返回消息時,線程從存儲模塊中提取取出的狀態(tài)插入同步隊列 中。
根據(jù)本發(fā)明的另一方面,提供了一種多線程數(shù)據(jù)同步裝置。
根據(jù)本發(fā)明的多線程數(shù)據(jù)同步裝置包括提取執(zhí)行模塊,用于從同步隊列中取 出待同步網元對應的同步狀態(tài)機的狀態(tài)并執(zhí)行,并且在存儲模塊保存取出的狀態(tài)之后, 重新從同步隊列中取出可用狀態(tài)并執(zhí)行;存儲模塊,用于在取出的狀態(tài)需要等待前臺網 元返回消息時,保存取出的狀態(tài);第一插入模塊,用于在取出的狀態(tài)對應的網元返回消 息時,從存儲模塊中提取取出的狀態(tài)插入同步隊列中。
通過本發(fā)明,在從同步隊列中取出的狀態(tài)需要等待前臺網元返回消息時,線程 將取出的狀態(tài)保存在存儲模塊中,并重新從同步隊列中取出可用狀態(tài)并執(zhí)行;當取出的 狀態(tài)對應的網元返回消息時,線程從存儲模塊中提取取出的狀態(tài)插入同步隊列中,解決 了相關技術中線程80%以上的時間都是在等待前臺網元返回消息,導致線程的利用率不 高的問題,線程在有可執(zhí)行狀態(tài)存在的情況下不會再空轉等待前臺返回消息,進而大大 提高了數(shù)據(jù)同步的效率。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本 發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖 中
圖1是根據(jù)相關技術的多線程同步方法的示意圖2是根據(jù)本發(fā)明實施例的多線程同步方法的流程圖3是根據(jù)本發(fā)明優(yōu)選實施例的多線程同步方法的示意圖4是根據(jù)本發(fā)明實施例的多線程同步裝置的結構框圖5是根據(jù)本發(fā)明優(yōu)選實施例的多線程同步裝置的結構框圖。
具體實施方式
下文中將參考附圖并結合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突 的情況下,本申請中的實施例及實施例中的特征可以相互組合。
圖2是根據(jù)本發(fā)明實施例的多線程同步方法的流程圖。如圖2所示,該多線程 同步方法主要包括以下處理
步驟幻02 多線程池中的線程從同步隊列中取出待同步網元對應的同步狀態(tài)機 的狀態(tài)并執(zhí)行;
步驟幻04:在取出的狀態(tài)需要等待前臺網元返回消息時,線程將取出的狀態(tài)保存在存儲模塊中,并重新從同步隊列中取出可用狀態(tài)并執(zhí)行;
步驟幻06:當取出的狀態(tài)對應的網元返回消息時,線程從存儲模塊中提取取出 的狀態(tài)插入同步隊列中。
采用上述方法后,多線程池中的線程不再與同步任務一一對應,啟動N個線程 的情況下可以同時執(zhí)行N+個同步任務,且線程在有可執(zhí)行狀態(tài)存在的情況下不會再空轉 等待前臺返回消息,大大提高了數(shù)據(jù)同步的效率。
優(yōu)選地,在執(zhí)行上述步驟幻02之前,需要執(zhí)行以下處理將全部待同步網元對 應的同步狀態(tài)機的初始狀態(tài)插入同步隊列中。
在優(yōu)選實施過程中,可以把所有要同步的網元對應的同步狀態(tài)機的初始狀態(tài) (即Si),結合網元標識(ID)插入同步隊列(例如,READY-STATE優(yōu)先級隊列),所有 初始狀態(tài)的優(yōu)先級為0。
優(yōu)選地,步驟幻04中,線程將上述取出的狀態(tài)保存在存儲模塊中可以進一步包 括以下處理線程將取出的狀態(tài)對應的網元優(yōu)先級增加1后,將取出的狀態(tài)插入存儲模 塊中保存的網元標識與狀態(tài)的對應關系中。
優(yōu)選地,步驟幻06中,線程從存儲模塊中提取取出的狀態(tài)包括以下處理線程 根據(jù)網元返回消息對應的網元標識,從對應關系中提取出取出的狀態(tài)。
優(yōu)選地,步驟幻06中,線程將取出的狀態(tài)插入同步隊列中可以進一步包括以下 處理
(1)線程根據(jù)取出的狀態(tài)獲得前臺網元返回消息的次數(shù)確定取出的狀態(tài)對應的插 入優(yōu)先級;
例如,網元NEl的S2向S3轉換時,只需要接收一條前臺網元反饋的信息,而 網元NE2的S2向S3轉換時,需要接收到前臺網元反饋的10條信息,則網元NE2的S2 狀態(tài)對應的插入優(yōu)先級較高。
(2)線程根據(jù)插入優(yōu)先級將取出的狀態(tài)插入同步隊列中。
其中,上述對應關系可以但不限于是UREADY-STATE哈希表。在優(yōu)選實施過 程中,當啟動多線程池中的線程時,線程不斷從READY-STATE隊列中移出狀態(tài)并執(zhí)行 狀態(tài)動作,執(zhí)行完成后狀態(tài)遷移到狀態(tài)機的下一個狀態(tài),如果該狀態(tài)不需要等待前臺網 元返回消息,則線程接著執(zhí)行該狀態(tài)的動作,如果需要等待網元返回消息,則把該狀態(tài) 插入UREADY-STATE哈希表中,當前線程重新從READY-STATE隊列中獲取可用狀態(tài) (即可以直接執(zhí)行動作的狀態(tài),區(qū)別于需要等待前臺返回消息的狀態(tài))來執(zhí)行。
網元消息監(jiān)聽線程收到前臺網元返回的消息后,根據(jù)網元ID從 UREADY-STATE哈希表中檢索出與網元ID對應的同步狀態(tài),插入READY-STATE隊列 中。其中,插入優(yōu)先級由該同步狀態(tài)獲得前臺網元返回消息的次數(shù)計算得出,這樣可以 保證先同步網元能優(yōu)先完成。
優(yōu)選地,在一個同步狀態(tài)機對應的狀態(tài)全部執(zhí)行完畢時,線程重新從同步隊列 中取出可用狀態(tài)并執(zhí)行。
由于相關技術中線程與同步狀態(tài)機之間的一一對應關系被打散,因此在某個線 程執(zhí)行完一個狀態(tài)機的全部狀態(tài)的動作后,還可以去執(zhí)行另一個狀態(tài)機的某個狀態(tài)的動 作。由此可得,啟動N個線程的情況下可以同時執(zhí)行N+個同步任務,大大提高了線程工作效率。
以下結合圖3描述上述優(yōu)選實施方式。
圖3是根據(jù)本發(fā)明優(yōu)選實施例的多線程同步方法的示意圖。如圖3所示,該多 線程同步方法主要包括以下處理
步驟S302:首先在后臺建立一個優(yōu)先級隊列READY_STATE(即上述同步隊 列),該隊列用來保存有多個可用狀態(tài)(可以直接執(zhí)行動作的狀態(tài),區(qū)別于需要等待前臺 返回消息的狀態(tài))以及多個需要等待前臺返回消息的狀態(tài)。
在具體實施過程中,為了使隊列效率提高,可以使用堆結構。然后把所有網元 的對應的同步狀態(tài)機的初態(tài)實例化,并設置每個狀態(tài)的優(yōu)先級為0,插入隊列中。
步驟S304:維護一個線程池,根據(jù)系統(tǒng)中可能同時同步的網元數(shù)量確定線程池 中維護的線程個數(shù)。啟動線程池中線程,每個線程都不斷去檢索上述READY-STATE隊 列,從中取出第一個可用狀態(tài)執(zhí)行其狀態(tài)動作,執(zhí)行完畢后,當前狀態(tài)遷移為狀態(tài)機的 下一個狀態(tài),此時,如果當前狀態(tài)不需要等待前臺返回消息,則該線程繼續(xù)執(zhí)行當前狀 態(tài),否則,該線程將狀態(tài)對象內維護的網元優(yōu)先級加1后插入到以網元ID為Key,以狀 態(tài)機狀態(tài)為Value的哈希表UREADY_STATE(即上述存儲模塊中的對應關系示例)中。 該線程返回,重新開始從READY-STATE隊列中獲取可用狀態(tài)進行執(zhí)行。
步驟S306:系統(tǒng)中啟動一個網元返回消息監(jiān)聽線程,該線程根據(jù)前臺網元返回 的消息來更新網元狀態(tài)。當有一個網元消息返回到系統(tǒng)中,監(jiān)聽線程根據(jù)網元ID,從 UREADY-STATE哈希表中檢索出對應的狀態(tài)對象,將返回消息注入該狀態(tài)對象,并將該 狀態(tài)對象從UREADY-STATE哈希表中移除,插入READY-STATE隊列中。
步驟S308,當前狀態(tài)為狀態(tài)機最后一個狀態(tài)時,當狀態(tài)動作執(zhí)行完畢后,該狀 態(tài)機對應網元的同步任務執(zhí)行完畢。當前線程重新從READY-STATE隊列中獲取可用狀 態(tài)來執(zhí)行。當READY-STATE隊列與UREADY-STATE哈希表中都不存在狀態(tài)對象時, 所有網元同步完成。需要注意的是,在同步過程中,只有處于READY-STATE隊列中狀 態(tài)機初始狀態(tài)的網元可以被取消同步。
圖4是根據(jù)本發(fā)明實施例的多線程同步裝置的結構框圖。如圖4所示,該多線 程同步裝置主要包括提取執(zhí)行模塊40、存儲模塊42和第一插入模塊44。
提取執(zhí)行模塊40,用于從同步隊列中取出待同步網元對應的同步狀態(tài)機的狀 態(tài)并執(zhí)行,并且在存儲模塊保存取出的狀態(tài)之后,重新從同步隊列中取出可用狀態(tài)并執(zhí) 行;
存儲模塊42,用于在取出的狀態(tài)需要等待前臺網元返回消息時,保存取出的狀 態(tài);
第一插入模塊44,用于在取出的狀態(tài)對應的網元返回消息時,從存儲模塊中提 取取出的狀態(tài)插入同步隊列中。
采用上述裝置,多線程池中的線程不再與同步任務一一對應,啟動N個線程的 情況下可以同時執(zhí)行N+個同步任務,且線程在有可執(zhí)行狀態(tài)存在的情況下不會再空轉等 待前臺返回消息,大大提高了數(shù)據(jù)同步的效率。因此,上述裝置尤其適用于大量網元需 要同步的場景。
優(yōu)選地,如圖5所示,上述裝置還可以包括第二插入模塊46,用于將全部待同步網元對應的同步狀態(tài)機的初始狀態(tài)插入同步隊列中,其中,初始狀態(tài)對應的網元優(yōu) 先級均為0。
優(yōu)選地,上述存儲模塊42,用于將取出的狀態(tài)對應的網元優(yōu)先級增加1后,將 取出的狀態(tài)插入其保存的網元標識與狀態(tài)的對應關系中。
優(yōu)選地,如圖5所示,上述第一插入模塊44可以進一步包括提取子模塊 440,用于根據(jù)網元返回消息對應的網元標識,從對應關系中提取出取出的狀態(tài);確定子 模塊442,用于根據(jù)取出的狀態(tài)獲得前臺網元返回消息的次數(shù)確定取出的狀態(tài)對應的插入 優(yōu)先級;插入子模塊444,用于根據(jù)插入優(yōu)先級將取出的狀態(tài)插入同步隊列中。
優(yōu)選地,上述提取執(zhí)行模塊40,還用于在一個同步狀態(tài)機對應的狀態(tài)全部執(zhí)行 完畢時,重新從同步隊列中取出可用狀態(tài)并執(zhí)行。
需要注意的是,上述裝置中各模塊及其子模塊相互結合的優(yōu)選實施方式具體可 以參見圖2至圖3的描述,此處不再贅述。
綜上所述,借助本發(fā)明提供的上述實施例,將狀態(tài)機的狀態(tài)分離出來執(zhí)行,每 個狀態(tài)機不再對應于一個固定線程,可以解決數(shù)據(jù)同步過程中線程大量時間用于等待前 臺網元消息返回的問題。相關技術方案啟動N個線程的情況下最多只能同時執(zhí)行N個網 元數(shù)據(jù)同步,上述實施例提供的技術方案中沒有這個限制,N個線程可以執(zhí)行N+個同步 任務,由于相關技術中線程的大部分時間都用在了等待網元返回消息上,本發(fā)明中線程 沒有這部分時間開銷,只要隊列中有可用狀態(tài),線程就會有效執(zhí)行。因此,同樣數(shù)量的 同步任務,采用本發(fā)明提供的技術方案,只需要啟動更少的線程就能超過現(xiàn)有方案的同 步效率。
顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通 用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所 組成的網絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而可以將它 們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或 者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于 任何特定的硬件和軟件結合。
以上僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術 人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何 修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。8
權利要求
1.一種多線程數(shù)據(jù)同步方法,其特征在于,包括多線程池中的線程從同步隊列中取出待同步網元對應的同步狀態(tài)機的狀態(tài)并執(zhí)行;在所述取出的狀態(tài)需要等待前臺網元返回消息時,所述線程將所述取出的狀態(tài)保存 在存儲模塊中,并重新從所述同步隊列中取出可用狀態(tài)并執(zhí)行;當所述取出的狀態(tài)對應的網元返回消息時,所述線程從所述存儲模塊中提取所述取 出的狀態(tài)插入所述同步隊列中。
2.根據(jù)權利要求1所述的方法,其特征在于,在所述線程從同步隊列中取出待同步網 元對應的同步狀態(tài)機的狀態(tài)并執(zhí)行之前,所述方法還包括將全部待同步網元對應的同步狀態(tài)機的初始狀態(tài)插入所述同步隊列中,其中,所述 初始狀態(tài)對應的網元優(yōu)先級均為0。
3.根據(jù)權利要求2所述的方法,其特征在于,所述線程將所述取出的狀態(tài)保存在存儲 模塊中包括所述線程將所述取出的狀態(tài)對應的網元優(yōu)先級增加1后,將所述取出的狀態(tài)插入所 述存儲模塊中保存的網元標識與狀態(tài)的對應關系中。
4.根據(jù)權利要求3所述的方法,其特征在于,所述線程從所述存儲模塊中提取所述取 出的狀態(tài)包括所述線程根據(jù)所述網元返回消息對應的網元標識,從所述對應關系中提取出所述取 出的狀態(tài)。
5.根據(jù)權利要求1所述的方法,其特征在于,所述線程將所述取出的狀態(tài)插入所述同 步隊列中包括所述線程根據(jù)所述取出的狀態(tài)獲得前臺網元返回消息的次數(shù)確定所述取出的狀態(tài)對 應的插入優(yōu)先級;所述線程根據(jù)所述插入優(yōu)先級將所述取出的狀態(tài)插入所述同步隊列中。
6.根據(jù)權利要求1至5中任一項所述的方法,其特征在于,還包括在一個所述同步 狀態(tài)機對應的狀態(tài)全部執(zhí)行完畢時,所述線程重新從所述同步隊列中取出可用狀態(tài)并執(zhí) 行。
7.—種多線程數(shù)據(jù)同步裝置,其特征在于,包括提取執(zhí)行模塊,用于從同步隊列中取出待同步網元對應的同步狀態(tài)機的狀態(tài)并執(zhí) 行,并且在存儲模塊保存所述取出的狀態(tài)之后,重新從所述同步隊列中取出可用狀態(tài)并 執(zhí)行;所述存儲模塊,用于在所述取出的狀態(tài)需要等待前臺網元返回消息時,保存所述取 出的狀態(tài);第一插入模塊,用于在所述取出的狀態(tài)對應的網元返回消息時,從所述存儲模塊中 提取所述取出的狀態(tài)插入所述同步隊列中。
8.根據(jù)權利要求7所述的裝置,其特征在于,還包括第二插入模塊,用于將全部待同步網元對應的同步狀態(tài)機的初始狀態(tài)插入所述同步 隊列中,其中,所述初始狀態(tài)對應的網元優(yōu)先級均為0。
9.根據(jù)權利要求8所述的裝置,其特征在于,所述存儲模塊,用于將所述取出的狀態(tài)對應的網元優(yōu)先級增加1后,將所述取出的狀態(tài)插入其保存的網元標識與狀態(tài)的對應關系中。
10.根據(jù)權利要求9所述的裝置,其特征在于,所述第一插入模塊包括提取子模塊,用于根據(jù)所述網元返回消息對應的網元標識,從所述對應關系中提取 出所述取出的狀態(tài);確定子模塊,用于根據(jù)所述取出的狀態(tài)獲得前臺網元返回消息的次數(shù)確定所述取出 的狀態(tài)對應的插入優(yōu)先級;插入子模塊,用于根據(jù)所述插入優(yōu)先級將所述取出的狀態(tài)插入所述同步隊列中。
11.根據(jù)權利要求7至10中任一項所述的裝置,其特征在于,所述提取執(zhí)行模塊,還用于在一個所述同步狀態(tài)機對應的狀態(tài)全部執(zhí)行完畢時,重 新從所述同步隊列中取出可用狀態(tài)并執(zhí)行。
全文摘要
本發(fā)明提供了一種多線程數(shù)據(jù)同步方法及裝置,在上述方法中,多線程池中的線程從同步隊列中取出待同步網元對應的同步狀態(tài)機的狀態(tài)并執(zhí)行;在取出的狀態(tài)需要等待前臺網元返回消息時,線程將取出的狀態(tài)保存在存儲模塊中,并重新從同步隊列中取出可用狀態(tài)并執(zhí)行;當取出的狀態(tài)對應的網元返回消息時,線程從存儲模塊中提取取出的狀態(tài)插入同步隊列中。根據(jù)本發(fā)明提供的技術方案,線程在有可執(zhí)行狀態(tài)存在的情況下不會再空轉等待前臺返回消息,進而大大提高了數(shù)據(jù)同步的效率。
文檔編號G06F15/173GK102023899SQ201010587888
公開日2011年4月20日 申請日期2010年12月14日 優(yōu)先權日2010年12月14日
發(fā)明者張勇 申請人:中興通訊股份有限公司