.Net 中的多个 Parallel.ForEach 循环

Sha*_*zak 5 .net c# multithreading task-parallel-library parallel.foreach

在.Net进程中,只有一个托管线程池。我们可以根据需要通过公共属性设置最小和最大线程数。

在.Net 中,我们还可以Parallel.ForEach从后台的托管线程池中获取线程。

我们Parallel.ForEach还可以设置MaxDegreeOfParallelism限制最大线程数。

我有两个Parallel.ForEach并行运行。一个MaxDegreeOfParallelism设置为 3,另一个设置为 7。

我的问题是:我的两个Parallel.ForEach循环是否在幕后使用相同的线程池。如果是,如何Parallel.ForEach限制线程MaxDegreeOfParallelism。多个 Parallel.ForEach循环和一个托管线程池如何协同工作?如果您能在我深入了解 .net core 源代码之前提供高级解释或一些指示,那将会非常有帮助。

Gle*_*leb 5

  • 我的两个Parallel.ForEach循环在后台使用相同的线程池吗?

    是的

  • 如何Parallel.ForEach使用 MaxDegreeOfParallelism 限制线程。

    ParallelOptions.MaxDegreeOfParallelism获取或设置ParallelOptions 实例启用的最大并发任务数。

    默认情况下,Parallel 类上的方法尝试使用所有可用处理器,不可取消,并且以默认 TaskScheduler (TaskScheduler.Default) 为目标。ParallelOptions 可以覆盖这些默认值。

  • 多个Parallel.ForEach循环和一个托管线程池如何协同工作?

    他们共享同一个线程池。正如这里所描述的:

    一般情况下,您不需要修改此设置。但是,您可以选择在高级使用场景中显式设置它,例如:

    当您同时运行多个算法并想要手动定义每个算法可以利用系统的多少时。您可以为每个设置 MaxDegreeOfParallelism 值。