Parallel.for 循环执行

Posted

技术标签:

【中文标题】Parallel.for 循环执行【英文标题】:Parallel.for loop Execution 【发布时间】:2021-01-09 23:10:35 【问题描述】:

场景

我需要创建并行执行多个函数的n 线程(不等于要执行的函数数)。所以我的代码是

    static void Main() 
     
        Parallel.For(0, 2, i => // it creates 2 threads as number of iterations.why?
            
                  method1();
                  method2();
                  method3();
                  method4();
                  method5();
                  method6();
                  method7();
                  method8();
                  method9();
                  method10();
            );
     

如何在此处以最佳方式使用MaxDegreeOfParallelism 属性?有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

如你所愿

var methods = new Action[] 
    method1, method2, method3, method4, method5, method6, method7, method8, method9, method10 ;

Parallel.For(0, methods.Length, i =>

    methods[i]();
);

这样可以设置并行度

var options = new ParallelOptions  MaxDegreeOfParallelism = 4 ;

Parallel.For(0, methods.Length, options, i =>

当您编写Parallel.For(0, 2 时,它会为指定数量的元素创建一个循环:从 0(包括)到 2(不包括)。因此,最多可以有两个线程。

【讨论】:

【参考方案2】:

您似乎在寻找Parallel.Invoke 而不是Parallel.For(我在您的代码中看不到任何循环):

  ParallelOptions options = new ParallelOptions() 
    //TODO: carry out experiment on your workstation to find out the right number
    MaxDegreeOfParallelism = 4, 
  ;

  // Run method1..method10 in parallel while using options 
  Parallel.Invoke(options,
    method1,
    method2,
    method3,
    method4,
    method5,
    method6,
    method7,
    method8,
    method9,
    method10
  );

【讨论】:

以上是关于Parallel.for 循环执行的主要内容,如果未能解决你的问题,请参考以下文章

在Parallel.For中,是否可以同步每个线程?

Parallel.For循环清理[关闭]

C#的并发循环(for,foreach,parallel.for,parallel.foreach)对比

我可以在 Parallel.For 循环中使用相同的函数委托吗

VB.NET 在 Parallel.for Synclock 内的嵌套循环中运行 sum 丢失信息

Parallel