gpt4 book ai didi

c# - ParallelOptions.MaxDegreeOfParallelism 是否全局应用于多个并发并行调用?

转载 作者:行者123 更新时间:2023-11-30 15:13:38 24 4
gpt4 key购买 nike

考虑此代码在具有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com