2013-02-14 37 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之后,一些线程可能(暂时)仍然存在,这可以用于线程池活动。但据我所知,你无法预测,是否还有多少线程会继续存在。

相关问题