【问题标题】:Parallel.ForEach: will one of the thread be a main thread?Parallel.ForEach:其中一个线程会是主线程吗?
【发布时间】:2015-09-10 05:40:24
【问题描述】:

我从主线程调用了Parallel.ForEach 循环。 我的问题如下: “Parallel.ForEach 期间创建的线程之一会是主线程吗?”

【问题讨论】:

  • 你能定义Main thread吗?
  • 如果 TPL 使用执行 Main 方法的线程,它将对您的应用工作流程产生什么影响?

标签: .net parallel.foreach


【解决方案1】:

当您使用像Parallel 类这样的并行结构时,这并不意味着创建了新线程。 .NET 提供了一种称为线程池的东西,其中有许多已创建的线程可用于任何 .NET 应用程序,因此您的应用程序不会创建任何新线程,无论它是否使用 Parallel 之类的类。

根据msdnParallel.ForEach

执行一个 foreach(在 Visual Basic 中为 For Each)操作,其中 迭代可以并行运行。

所以所有被调用的Actions 也有可能在主线程上运行,如果你调用一些微不足道的东西,编译器甚至可能使用线程池线程优化掉。

【讨论】:

    【解决方案2】:

    Parallel.ForEach 使用一些“分支”线程通过ThreadPool 并行运行您的操作,并阻塞当前线程(您的“主线程”)。一个“分支”很可能在当前线程上运行,但它是不可预测的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多