前陣子在面試的時候,面試官提到他們的 Job 有用到平行處理,我沒細問技術細節,但面試後我想到在 .NET 其實有提到簡易的平行處理函式,以示範如何使用。

下列宣告的資料,是用來測試平行處理的,資料共900萬筆,然後做加法運算。

#region global var
int size = 9000000;
List<int> testResult1 = new List<int>();
List<int> testResult2 = new List<int>();
int[] testResultSum = new int[size];
for (int i = 0; i < size; i++)
{
    testResult1.Add(i);
    testResult2.Add(i);
}
#endregion

下列是比較線性跟平行處理的時間差異,平行處理部份其實只有呼叫 Parallel.For 這個函式而已。

stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < size; i++)
{
    //result[i] = matrix1[i] + matrix2[i];
    testArray[i] = testResult1[i] + testResult2[i];
}
stopwatch.Stop();
Console.WriteLine($"線性處理工作,共需 {stopwatch.ElapsedMilliseconds} ms");


stopwatch = new Stopwatch();
stopwatch.Start();
Parallel.For(0, size, i =>
{
    testResultSum[i] = testResult1[i] + testResult2[i];
});
stopwatch.Stop();
Console.WriteLine($"平行處理大量資料工作,共需 {stopwatch.ElapsedMilliseconds} ms");

雖然時間上的確有差,但在900萬筆的資料下,其實差別不大,我認為如果處理的工作是吃CPU的話,平行處理意義不大,但如果涉及到資料庫的存取及呼叫到 Web API,那平行處理的確可以節省時間,應用的場景就看大家如何運用了。

參考資料