Parallel.ForEach 之 MaxDegreeOfParallelism

參考:Max Degree of Parallelism最大並行度配置

結論:

  1. 與設置的線程數有關
  2. 有設置的並行度有關

測試如下:

@@@code

System.Threading.ThreadPool.SetMinThreads(20, 20);

System.Threading.ThreadPool.SetMinThreads(50, 50);

var list = GetIPByMask(IPAddress.Parse("192.168.10.1"), IPAddress.Parse("255.255.255.0"));

System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();

stopwatch.Start();

Parallel.ForEach(list, new ParallelOptions() { MaxDegreeOfParallelism=6}, a =>

{

var status = Ping(a.ToString(), (ip, ex) => Console.WriteLine($"ping {ip},{ex.Message}"), 1000);

Console.WriteLine($"at {DateTime.Now.Second} ping {a.ToString()} {status.ToString()}");

}

);

//foreach (var a in list)

//{

// var status = Ping(a.ToString(), (ip, ex) => Console.WriteLine($"ping {ip},{ex.Message}"), 1000);

// Console.WriteLine($"at {DateTime.Now.Second} ping {a.ToString()} {status.ToString()}");

//}

Console.WriteLine($"平均每秒處理:{(int)Math.Ceiling( list.Count/stopwatch.Elapsed.TotalSeconds)}" );

Console.Read();

@@#

 

  1. 不設置線程數,不限制並行數,每秒約9個

  1. 不使用並行,等到花都謝了

  1. 增加線程數,

不限制並行數

並行設爲2

並行設爲6

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章