Parallel.ForEach期间使用的线程数

his*_*a21 2 c# multithreading threadpool

我只是做了一个简单的实验,使用下面的代码显示进程中的线程总数.

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);
Run Code Online (Sandbox Code Playgroud)

我在parallel.foreach之前得到12个线程,并在parallel.foreach之后获得了17个线程.

问题:

  1. 为什么Parallel.Foreach中使用的5个线程在循环后继续运行?这是否意味着如果我有其他Parallel.Foreach之后会有更多的线程继续增加?
  2. 为什么Parallel.Foreach以前不使用12个线程?是因为12个线程目前正在被其他人使用吗?

Boa*_*ler 7

这种行为在外部视图中是不确定的.

Parallel类使用Threadpool.关于何时创建新线程以及何时使用旧线程有一些决定.这也为您提供了性能并减少了所需的记忆量.

在并行foreach之后,某些线程可能(临时)仍然存在,这可以用于线程池活动.但据我所知,你无法预测,是否会继续存在多少线程.