c# – MaxDegreeOfParallelism做什么?

我使用Parallel.ForEach和我做一些数据库更新,现在没有设置MaxDegreeOfParallelism,双核处理器机器导致sql客户端超时,其中四核处理器机器以某种方式不超时。

现在我不能控制什么样的处理器内核可用我的代码运行,但有一些设置,我可以更改与MaxDegreeOfParallelism,可能会同时运行更少的操作,不会导致超时?

我可以增加超时,但它不是一个很好的解决方案,如果在较低的CPU我可以同时处理较少的操作,这将减少cpu的负载。

确定我已经阅读所有其他帖子和MSDN太,但将设置MaxDegreeOfParallelism更低的价值,使我的四核机器受苦?

例如,有没有做任何事情,如果CPU有两个核心,然后使用20,如果CPU有四个核心,然后40?

答案是,它是整个并行操作的上限,不考虑核数。

因此,即使你不使用CPU,因为你在等待IO或锁,没有额外的任务将并行运行,只有你指定的最大值。

为了找到这一点,我写了这段测试代码。有一个人工锁在那里刺激TPL使用更多的线程。当你的代码等待IO或数据库时,也会发生同样的情况。

class Program
{
    static void Main(string[] args)
    {
        var locker = new Object();
        int count = 0;
        Parallel.For
            (0
             , 1000
             , new ParallelOptions { MaxDegreeOfParallelism = 2 }
             , (i) =>
                   {
                       Interlocked.Increment(ref count);
                       lock (locker)
                       {
                           Console.WriteLine("Number of active threads:" + count);
                           Thread.Sleep(10);
                        }
                        Interlocked.Decrement(ref count);
                    }
            );
    }
}

如果我不指定MaxDegreeOfParallelism,控制台日志显示最多大约8个任务同时运行。喜欢这个:

Number of active threads:6
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:6
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7
Number of active threads:7

它开始较低,随着时间的增加,最后它试图同时运行8。

如果我把它限制到某个任意值(说2),我得到

Number of active threads:2
Number of active threads:1
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2
Number of active threads:2

哦,这是在四核机器上。

http://stackoverflow.com/questions/9538452/what-does-maxdegreeofparallelism-do

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – MaxDegreeOfParallelism做什么?