2013-02-14 205 views
2

我只是做了一個簡單的實驗,使用下面的代碼顯示進程中的線程總數。Parallel.ForEach期間使用的線程數

Console.WriteLine("Total Number of Threads: {0}", Process.GetCurrentProcess().Threads.Count); 

Parallel.ForEach(
      names, 
      new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount }, 
      name => 
      { 
       Console.WriteLine(name); 
      }); 
Console.Read(); 
Console.WriteLine("Total Number of Threads: {0}", Process.GetCurrentProcess().Threads.Count); 

我在parallel.foreach之前得到了12個線程,並且在parallel.foreach之後得到了17個線程。

問題:

  1. 這是爲什麼在Parallel.Foreach使用的5個線程繼續循環後運行?這是否意味着如果在此之後我有其他的Parallel.Foreach,會有更多的線程繼續增加?
  2. 爲什麼Parallel.Foreach之前不使用12個線程?是否因爲12個線程目前正在被其他人使用?

回答

7

此行爲從外部視角不確定。

Parallel類使用Threadpools。關於何時創建新線程以及何時使用舊線程有一些解決方案。這也給你的表現和減少所需的記憶量。

在並行foreach之後,一些線程可能(暫時)仍然存在,這可以用於線程池活動。但據我所知,你無法預測,是否還有多少線程會繼續存在。

相關問題