确保并行调用不会占用太多 CPU



我有一个带有WCF的C#程序,它使用并行调用位。

首先,每个客户端调用在服务端与我的 WCF 服务并行。

我有一个包含 B 类列表的 A 类

我可以在不添加 A 的情况下添加 B 类列表。

要插入我的元素 B 列表,我并行进行,因为在添加之前我做了很多验证。与 A 相同

一些客户端在一次中添加了非常大的 A 元素列表。

因此,我使用并行调用来添加每个 A 元素。

我使用并行选项配置它以使用不超过一半的 CPU。 让执行其他操作的其他用户使用 CPU。

但是,添加已经并行限制为CPU一半的A类的任务创建了另一个并行调用以添加B类

对于示例 在电话 InvokeAddClassAList 创建两个线程 AddClassA。

和每个添加类 A 创建两个线程 AddClassB

所以,我现在有 4 个线程。

这 4 个线程是否仅限于 CPU 的一半? 还是只有两个 AddClassA 限制为一半 CPU,每个子线程可以使用任意数量的 CPU?

var pCount = Environment.ProcessorCount / 2;
var options = new ParallelOptions();
options.MaxDegreeOfParallelism = pCount > 0 ? pCount : 1;
Parallel.Invoke(options, actions.ToArray());

您的 CPU 是应该使用的资源。如果它闲置了,没有人会感谢你。因此,限制您的流程毫无意义。你甚至不知道当时是否有其他人在使用电脑。

您可以使用自己的 TaskScheduler 实现来影响何时启动任务、启动任务数量以及启动时间。

但同样,没有意义。您应该尽可能多地提出要求。如果你想对其他用户友好,降低你的进程优先级,所以如果你想使用 100%,他们仍然可以使用他们优先级更高的进程。

最新更新