標籤:對象 工廠 tor 資料庫連接 流水線 .com task mini nbsp
本文參考的博文出處:http://www.cnblogs.com/stoneniqiu/p/4857021.html
總體說明:
(1)、理解硬體執行緒和軟體線程
硬體執行緒也稱為邏輯核心,一個物理核心可以使用超執行緒技術提供多個硬體執行緒。所以一個硬體執行緒並不代表一個物理核心;Windows中每個啟動並執行程式都是一個進程,每一個進程都會建立並運行一個或多個線程,這些線程稱為軟體線程。硬體執行緒就像是一條泳道,而軟體線程就是在其中遊泳的人。
(2)Net Framework4 引入了新的Task Parallel Library(工作平行程式庫,TPL),它支援資料並行、任務並行和流水線。讓開發人員應付不同的並行場合。
- 資料並行:有大量資料需要處理,並且必須對每一份資料執行同樣的操作。比如通過256bit的金鑰組100個Unicode字串進行AES演算法加密。
- 任務並行:通過任務並發運行不同的操作。例如組建檔案散列碼,加密字串,建立縮圖。
- 流水線:這是任務並行和資料並行的結合體。
TPL引入了System.Threading.Tasks ,主類是Task,這個類表示一個非同步並發的操作,然而我們不一定要使用Task類的執行個體,可以使用Parallel靜態類。它提供了Parallel.Invoke, Parallel.For Parallel.Forecah 三個方法。
一、業務情境
目前在類比工作中可能遇到的一個情境,從中間伺服器讀取xml檔案,分別為兩法刑事案例資訊,兩法行政案例資訊(目前類比的兩個xml檔案單詞匯入的業務資料量在20000~30000條左右),對應兩張資料庫表為[Sys_TwoLawsConvergence_AdministrationCase]、[Sys_TwoLawsConvergence_PoliceCase],表結構及具體欄位如下所示。
其中,主鍵並非為自增,主鍵的維護由對接應用系統統一提供(目前並未建立任何索引,後期準備深入研究一下 sql server 的 b樹索引及位元影像索引)。
考慮到,同時向兩張資料表插入資料,除去使用多線程同時寫入外,.net framework 4.0 提供了新的Task Parallel Library(工作平行程式庫,TPL),它支援資料並行、任務並行和流水線。在此業務情境,我採用了最簡單的方法,及Parallel類的Invoke()方法,通過Stopwatch,準確測量並存執行插入資料與串列執行插入資料在執行效率上的對比。
二、具體實現
定義了NetCloudPoliceInsertData、NetCloudAdministrationInserData類,分別為兩法刑事案例資訊寫入類及兩法行政案例資訊寫入類具體結構及方法如下
(1)NetCloudPoliceInsertData類
其中DataAccessFactory.Instance().GetDataAccess("Sql Server");DataAccessFactory為自訂的資料訪問類,此處原廠模式保證工廠類對象在記憶體中有且僅有一個,每一次GetDataAccess()都會建立一個資料庫連接(非串連池的方式),寫入庫表的方式採用批量執行
(2)NetCloudAdministrationInserData類
三、並存執行與串列執行效率比較
(1) Execute
其中 Parallel靜態類的Invoke方法注釋為【儘可能並存執行提供的每個操作】,在輸出執行語句後,可以看到並存執行的執行效果,如所示:
四、運行結果比較
並存執行結果時間:
串列執行結果時間:
並存執行在時間上比串列執行時間上少2分鐘左右,此次匯入的資料量為20000條,後期會追加大數量的匯入,以檢驗並存執行的效果。
c#進階(1)—— Task Parallel Library 並存執行與串列執行