- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑此代码在具有 32 个内核的 CPU 上运行:
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 8;
Parallel.For(0, 4, po, (i) =>
{
Parallel.For(0, 4, po, (j) =>
{
WorkMethod(i, j); // assume a long-running method
});
}
);
我的问题是 WorkMethod(i, j)
的实际最大可能并发数是多少?是 4、8 还是 16?
最佳答案
ParallelOptions.MaxDegreeOfParallelism
未全局应用。如果您有足够的核心,并且调度程序认为合适,您将获得嵌套 MPD 值的乘积,每个 For
能够启动那么多任务(如果工作负载不受约束)。
考虑这个例子,3 个任务可以再启动 3 个任务。这受 MDP 选项 3 的限制。
int k = 0;
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 3;
Parallel.For(0, 10, po, (i) =>
{
Parallel.For(0, 10, po, (j) =>
{
Interlocked.Increment(ref k);
Console.WriteLine(k);
Thread.Sleep(2000);
Interlocked.Decrement(ref k);
});
Thread.Sleep(2000);
});
输出
1
2
3
4
7
5
6
8
9
9
5
6
7
9
9
8
8
9
...
如果 MDP 是全局性的,我猜你只会得到 3,因为它不是你得到 9。
关于c# - ParallelOptions.MaxDegreeOfParallelism 是否全局应用于多个并发并行调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633074/
使用MSDN article上有关ParallelOptions.MaxDegreeOfParallelism的代码,我尝试了以下操作... ParallelOptions po = new Para
考虑此代码在具有 32 个内核的 CPU 上运行: ParallelOptions po = new ParallelOptions(); po.MaxDegreeOfParallelism = 8;
ParallelOptions 的成员之一是 CancellationToken,其值旨在在 Parallel.ForEach 的 lambda 函数中访问。 使用它需要在调用 Parallel.Fo
你好,我正在使用不同的 MaxDegreeOfParallelism 方法值进行“动态”多线程处理,但是每当我尝试更改大于 1 的 MaxDegreeOfParallelism 值时,它就会在控制台中
我们在代码中广泛使用了 Parallel.Foreach,唯一的挑战是如何在 DEBUG 模式下使用可视化调试时使其串行化,以下是我们正在做的事情,请分享您的观点: public static cla
我正在运行一个多线程循环: protected ParallelOptions parallelOptions = new ParallelOptions(); parallelOptions.Max
请建议哪种方法是正确的(如果有的话) 有效使用 ParallelOptions、TaskCreationOptions 和 Task.Factory.StartNew(() =>。 private v
我有一个 Windows C# WinForms 应用程序。我对默认任务调度程序在任务并行库中的并行类的行为方式感到困惑。当我在 ParallelForEach 方法中调用 Parallel.For
我是一名优秀的程序员,十分优秀!