一種多線程計算裝置制造方法
【專利摘要】本發(fā)明適用于辦公軟件領域,提供了一種多線程計算裝置,所述裝置包括:管理器、多個執(zhí)行器和存儲器,其中,所述管理器,用于對所述裝置的初始化,對所述多個執(zhí)行器的生命周期管理、對所述多個執(zhí)行器間的通信調度和對多個執(zhí)行器分配任務;所述執(zhí)行器,用于封裝線程的實現(xiàn)細節(jié),并依據(jù)實現(xiàn)細節(jié)執(zhí)行分配的任務;所述存儲器,用于取數(shù)階段結果的存儲。本發(fā)明提供的技術方案具有系統(tǒng)性能和穩(wěn)定性的提升的優(yōu)點。
【專利說明】一種多線程計算裝置
【技術領域】
[0001]本發(fā)明屬于辦公軟件領域,尤其涉及一種多線程計算裝置。
【背景技術】
[0002]自從2006年Intel公司推出全球首款雙核處理器以來,服務器的硬件水平不斷提升,今天,配備4核以上多個CPU以及大容量內存的服務器已經(jīng)成為主流,但是我們的直觀感覺是ERP系統(tǒng)中核心計算的性能并沒有得到太多提升。影響應用性能提升的關鍵原因是目前的程序大多是按照單一線程的思路編寫的,對多核及多線程的支持不足。
[0003]在大型企業(yè)的ERP系統(tǒng)中,隨著應用復雜度和數(shù)據(jù)量的不斷增長,核心計算的性能和穩(wěn)定性問題日益突顯。比如成本管理中每個月的結轉計算,需要把當期企業(yè)中所有產品、物料的數(shù)據(jù)自下而上進行卷積計算。這類核心計算的顯著特點是:
[0004]第一,計算過程由讀取數(shù)據(jù)和計算兩部分構成;
[0005]第二,讀取的數(shù)據(jù)量巨大,計算過程復雜;
[0006]第三,無并發(fā)執(zhí)行。
[0007]按照傳統(tǒng)單一線程編程思路,在讀取數(shù)據(jù)階段,系統(tǒng)資源的消耗主要集中在IO傳輸和內存讀寫上,在數(shù)據(jù)量巨大的情況下,容易發(fā)生內存溢出,并且在取數(shù)的大段時間內CPU資源使用嚴重不足;在計算階段,系統(tǒng)資源的消耗主要集中在CPU的復雜計算上,由于是整體計算,耗時很長,在整個計算過程中,并沒有發(fā)揮出多核CPU的硬件優(yōu)勢來有效提升計算性能。
【發(fā)明內容】
[0008]本發(fā)明實施例的目的在于提供一種多線程計算裝置,旨在解決現(xiàn)有技術中單線程計算帶來的CPU資源使用不足,計算性能不高的問題。
[0009]一方面,提供一種多線程計算裝置,所述裝置包括:管理器、多個執(zhí)行器和存儲器,其中,
[0010]所述管理器,用于對所述裝置的初始化,對所述多個執(zhí)行器的生命周期管理、對所述多個執(zhí)行器間的通信調度和對多個執(zhí)行器分配任務;
[0011]所述執(zhí)行器,用于封裝線程的實現(xiàn)細節(jié),并依據(jù)實現(xiàn)細節(jié)執(zhí)行分配的任務;
[0012]所述存儲器,用于取數(shù)階段結果的存儲。
[0013]可選的,所述管理器,還用于配制線程的最大數(shù)量。
[0014]可選的,所述管理器,具體用于依據(jù)取樹任務和執(zhí)行器的數(shù)量,隨機或按模數(shù)將任務分發(fā)給所述多個執(zhí)行器。
[0015]可選的,所述多個執(zhí)行器,具體用于按照分發(fā)的任務按照執(zhí)行隊列中先進先出的順序執(zhí)行取數(shù)操作。
[0016]在本發(fā)明實施例中,本發(fā)明提供的技術方案充分利用硬件資源,提高計算性能,將多線程的實現(xiàn)細節(jié)封裝起來,極大簡化了多線程改造的過程,帶來系統(tǒng)性能和穩(wěn)定性的提升的優(yōu)點。
[0017]附圖簡要說明
[0018]圖1是本發(fā)明【具體實施方式】提供的一種多線程計算裝置的結構圖;
[0019]圖2是本發(fā)明【具體實施方式】提供的多線程計算裝置的原理圖。
[0020]實施本發(fā)明的方式
[0021]為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0022]本發(fā)明【具體實施方式】提供一種多線程計算裝置,該裝置如圖1所示,包括:管理器101、多個執(zhí)行器102和存儲器103,其中,
[0023]管理器101:用于所述裝置的初始化、線程的生命周期管理和線程間的通信調度。由于服務器硬件水平的不同,對多線程支持的能力也有差別,在裝置的初始化階段,可以通過管理器對線程的最大數(shù)量進行設定,避免系統(tǒng)過載。作為整個裝置的大腦,管理器控制每個執(zhí)行器(即線程)創(chuàng)建、運行、阻塞和銷毀的完整生命周期,并采用了先進的Map-Reduce機制控制取數(shù)線程和計算線程的調度,實現(xiàn)了真正意義上的并行計算。
[0024]執(zhí)行器102:真正進行業(yè)務操作的實體組件,實際上就是每一個執(zhí)行線程。執(zhí)行器封裝了線程的實現(xiàn)細節(jié),并依據(jù)實現(xiàn)細節(jié)執(zhí)行;包裝了業(yè)務操作,受管理器的管理和控制。作為業(yè)務活動的執(zhí)行者,執(zhí)行器擁有獨立的執(zhí)行隊列,多個任務在執(zhí)行器中按照“先進先出”的順序執(zhí)行。當執(zhí)行器被分配取數(shù)任務的時候,它執(zhí)行取數(shù)業(yè)務操作,并將結果存入存儲區(qū);當執(zhí)行器被分配計算任務的時候,它從存儲區(qū)獲取數(shù)據(jù)并執(zhí)行算法計算。
[0025]存儲區(qū)103:負責取數(shù)階段結果的存儲。存儲區(qū)分為一系列小的區(qū)域,每個區(qū)域有唯一的地址,用于區(qū)分不同任務的查詢結果。管理器控制取數(shù)階段的數(shù)據(jù)寫入和計算階段的數(shù)據(jù)讀取。
[0026]可選的,上述管理器101還用于配置線程的最大數(shù)量。
[0027]可選的,上述管理器101具體用于依據(jù)取數(shù)任務和執(zhí)行器102的數(shù)量,隨機或按模數(shù)將任務分發(fā)給多個執(zhí)行器102.[0028]如圖2所示,為本發(fā)明的原理圖。圖中將從數(shù)據(jù)庫讀取數(shù)據(jù)的操作簡稱為“取數(shù)”,執(zhí)行取數(shù)任務的執(zhí)行器稱為“取數(shù)執(zhí)行器”;將算法計算的過程簡稱為“計算”,執(zhí)行計算任務的執(zhí)行器稱為“計算執(zhí)行器”。下面按照圖中的數(shù)字標識詳細說明裝置的原理和機制。
[0029]配置。使用本裝置進行多線程計算前需要進行配置,主要包括兩個方面的內容:一是針對不同的服務器硬件,對線程的最大數(shù)量進行設置,避免系統(tǒng)過載,圖中配置了最多4個取數(shù)線程,2個計算線程;二是設定任務到執(zhí)行器的分配策略,比如隨機分配或按模數(shù)分配等。
[0030]組件初始化。根據(jù)配置創(chuàng)建執(zhí)行器和存儲區(qū)。
[0031]輸入取數(shù)請求。這個過程在裝置外進行,取數(shù)程序由業(yè)務系統(tǒng)提供,按照一定的策略分批從數(shù)據(jù)庫中讀取數(shù)據(jù)。它們以取數(shù)任務的形式進入裝置。
[0032]取數(shù)任務分配與執(zhí)行。管理器根據(jù)取數(shù)任務和執(zhí)行器的數(shù)量,按照用戶設定的分配策略分發(fā)任務,圖中按照模數(shù)進行分發(fā),即用任務序號對取數(shù)執(zhí)行器的總數(shù)量取模,得到的值即為執(zhí)行器的序號,比如第I個和第5個任務由執(zhí)行器I執(zhí)行,第2個和第6個任務由執(zhí)行器2執(zhí)行。分發(fā)后的請求進入對應的執(zhí)行器的執(zhí)行隊列中。各取數(shù)執(zhí)行器按照執(zhí)行隊列中先進先出的順序執(zhí)行取數(shù)操作。
[0033]存儲取數(shù)結果。每個取數(shù)操作完成后,取數(shù)執(zhí)行器會在存儲區(qū)分配新的區(qū)域存儲查詢結果,并通過事件機制通知管理器取數(shù)過程已完成,以及查詢結果在存儲區(qū)中的地址。
[0034]計算任務分配與執(zhí)行。計算程序由業(yè)務系統(tǒng)提供。管理器按照用戶設定的分配策略向計算執(zhí)行器分發(fā)計算任務,并給出這次計算需要的數(shù)據(jù)在存儲區(qū)的地址。分發(fā)后的任務進入對應的執(zhí)行器的執(zhí)行隊列中。各計算執(zhí)行器按照執(zhí)行隊列中先進先出的順序執(zhí)行計算。計算過程首先會按照管理器給定的地址從存儲區(qū)中獲取數(shù)據(jù),然后執(zhí)行算法,計算完成后,對應的數(shù)據(jù)會從存儲區(qū)中刪除,以保證內存的穩(wěn)定性。
[0035]輸出結果。裝直返回計算結果。
[0036]裝置采用了先進的Map-Reduce機制進行多線程調度,各個執(zhí)行器之間不存在相互依賴,每個執(zhí)行器節(jié)點會定期向管理器報告狀態(tài)和完成的工作,如果一個節(jié)點保持沉默的時間超過了預設值,管理器會認為該執(zhí)行器出現(xiàn)異常,并把該執(zhí)行器沒有執(zhí)行完的任務分配給其他節(jié)點繼續(xù)執(zhí)行。因此,從設計的角度,裝置具有非常好的并行性和健壯性。
實施例
[0037]在大型企業(yè)成本管理的實際應用中,每個月的成本結轉操作是整個流程中最關鍵的核心算法。成本結轉是在企業(yè)一個會計期間內,對產品樹上的產品的所有生產成本和制造費用自下而上的卷積計算,涉及到數(shù)據(jù)量巨大的業(yè)務單據(jù)和非常復雜的計算過程,因此傳統(tǒng)的單一線程設計容易發(fā)生內存溢出和性能問題。下面以一個具體的例子說明本裝置在成本結轉中的應用成果。
[0038]A工廠生產大型起重機械,產品樹深度為15層,某會計期間內平均每層產品節(jié)點的業(yè)務單據(jù)數(shù)據(jù)量為10000條,每個產品節(jié)點平均數(shù)據(jù)量為500條。按照單一線程的處理方式,計算每層節(jié)點平均要先查詢出10000條數(shù)據(jù),緩存在內存中,再執(zhí)行結轉計算。這樣平均每層的執(zhí)行時間在I分鐘左右,并且在某些數(shù)據(jù)量遠大于平均值的產品層級上非常容易發(fā)生內存溢出的情況。
[0039]設應用服務器包含了 4顆4核心的CPU,使用本發(fā)明提出的多線程計算裝置,設置取數(shù)線程最大數(shù)量為8,結轉計算線程最大數(shù)量為6。對于產品樹的每一層節(jié)點,取數(shù)策略為每次取不超過1500條的完整產品數(shù)據(jù),這樣取數(shù)線程滿負荷運轉時可以同時查詢最多12000條數(shù)據(jù)。在取數(shù)線程執(zhí)行過程中,后續(xù)的取數(shù)請求會在執(zhí)行隊列中排隊等待,一旦出現(xiàn)取數(shù)完成的情況,新的取數(shù)操作立即開始執(zhí)行,同時結轉計算線程啟動,對這最多1500條數(shù)據(jù)進行結轉計算,結轉計算線程滿負荷運轉時可以同時處理6組數(shù)據(jù)的結轉。經(jīng)過測算,在當前服務器條件下,多線程結轉平均每層的執(zhí)行時間在25秒左右,由于內存中緩存的數(shù)據(jù)使用完畢即銷毀,出現(xiàn)內存溢出的可能性大大降低。系統(tǒng)的穩(wěn)定性和性能有了明顯的提升。
[0040]反觀系統(tǒng)的改造成本,主要體現(xiàn)在如下三個方面:
[0041]第一,取數(shù)策略的變化,由原有的整層取數(shù)變?yōu)榉峙?shù);
[0042]第二,結轉算法的變化,由原有的整層計算變?yōu)榘磾?shù)據(jù)塊計算;
[0043]第三,其他適應性變化。[0044]這里面沒有牽涉到任何多線程編程的內容,且改造內容對原有系統(tǒng)的破壞性很小。應用程序員可以更多的專注于業(yè)務程序的編寫,而將多線程的復雜性完全交給計算裝置完成,系統(tǒng)改造成本極大地降低。
[0045]本領域技術人員可以理解,本發(fā)明實施例提供的技術方案全部或部分步驟是可以通過程序指令相關的硬件來完成。比如可以通過計算機運行程來完成。該程序可以存儲在可讀取存儲介質,例如,隨機存儲器、磁盤、光盤等。
[0046]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的【具體實施方式】之內所作的等同替換或改進等,均應包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種多線程計算裝置,其特征在于,所述裝置包括:管理器、多個執(zhí)行器和存儲器,其中, 所述管理器,用于對所述裝置的初始化,對所述多個執(zhí)行器的生命周期管理、對所述多個執(zhí)行器間的通信調度和對多個執(zhí)行器分配任務; 所述執(zhí)行器,用于封裝線程的實現(xiàn)細節(jié),并依據(jù)實現(xiàn)細節(jié)執(zhí)行分配的任務; 所述存儲器,用于取數(shù)階段結果的存儲。
2.根據(jù)權利要求1所述的裝置,其特征在于, 所述管理器,還用于配制線程的最大數(shù)量。
3.根據(jù)權利要求1所述的裝置,其特征在于, 所述管理器,具體用于依據(jù)取樹任務和執(zhí)行器的數(shù)量,隨機或按模數(shù)將任務分發(fā)給所述多個執(zhí)行器。
4.根據(jù)權利要求1所述的裝置,其特征在于, 所述多個執(zhí)行器,具體用于按照分發(fā)的任務按照執(zhí)行隊列中先進先出的順序執(zhí)行取數(shù)操作。`
【文檔編號】G06F9/48GK103605572SQ201310654713
【公開日】2014年2月26日 申請日期:2013年12月5日 優(yōu)先權日:2013年12月5日
【發(fā)明者】丁一鳴 申請人:用友軟件股份有限公司