Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Parallel.ForEach期间使用的线程数_C#_Multithreading_Threadpool - Fatal编程技术网

C# Parallel.ForEach期间使用的线程数

C# Parallel.ForEach期间使用的线程数,c#,multithreading,threadpool,C#,Multithreading,Threadpool,我只是用下面的代码做了一个简单的实验来显示进程中的线程总数 Console.WriteLine("Total Number of Threads: {0}", Process.GetCurrentProcess().Threads.Count); Parallel.ForEach( names, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount },

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

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个线程

问题:

  • 为什么这5个线程并行使用。Foreach在循环后继续运行?这是否意味着,如果我有其他并行。Foreach在此之后,将有更多的线程继续增加
  • 为什么是并行的。Foreach以前不使用12个线程?是因为12个线程目前正被其他线程使用吗

  • 从外部来看,这种行为是不确定的

    并行类使用线程池。关于何时创建新线程以及何时使用旧线程,有一些决定。这还可以提高性能并减少所需的内存量

    在并行foreach之后,一些线程可能(暂时)仍然存在,可以用于线程池活动。但据我所知,你无法预测,如果或多少线程将继续存在