【发布时间】:2015-09-10 05:40:24
【问题描述】:
我从主线程调用了Parallel.ForEach 循环。
我的问题如下:
“Parallel.ForEach 期间创建的线程之一会是主线程吗?”
【问题讨论】:
-
你能定义
Main thread吗? -
如果 TPL 使用执行 Main 方法的线程,它将对您的应用工作流程产生什么影响?
标签: .net parallel.foreach
我从主线程调用了Parallel.ForEach 循环。
我的问题如下:
“Parallel.ForEach 期间创建的线程之一会是主线程吗?”
【问题讨论】:
Main thread吗?
标签: .net parallel.foreach
当您使用像Parallel 类这样的并行结构时,这并不意味着创建了新线程。 .NET 提供了一种称为线程池的东西,其中有许多已创建的线程可用于任何 .NET 应用程序,因此您的应用程序不会创建任何新线程,无论它是否使用 Parallel 之类的类。
根据msdnParallel.ForEach
执行一个 foreach(在 Visual Basic 中为 For Each)操作,其中 迭代可以并行运行。
所以所有被调用的Actions 也有可能在主线程上运行,如果你调用一些微不足道的东西,编译器甚至可能使用线程池线程优化掉。
【讨论】:
Parallel.ForEach 使用一些“分支”线程通过ThreadPool 并行运行您的操作,并阻塞当前线程(您的“主线程”)。一个“分支”很可能在当前线程上运行,但它是不可预测的。
【讨论】: