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

时间:2018-01-17 14:27:39

标签: c# multithreading wcf parallel-processing

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

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

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

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

要插入我的元素B列表,我会并行执​​行,因为在添加之前我会进行大量验证。和A

一样

有些客户一次性添加了很多A元素列表。

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

我使用并行选项配置它,使用不超过一半的CPU。 让其他做其他事情的用户使用CPU。

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

例如,电话号码 InvokeAddClassAList 创建两个线程AddClassA。

每个AddClassA 创建两个线程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());

1 个答案:

答案 0 :(得分:1)

您的CPU是应该使用的资源。没有人会感谢你,如果它闲逛。所以限制你的过程毫无意义。您甚至不知道当时是否有其他人在使用计算机。

可以使用您自己的TaskScheduler实施来影响将启动的任务的次数和次数。

但同样,没有意义。您应该尽可能多地请求 。如果您希望对其他用户友善,请降低您的流程优先级,因此如果您想要100%使用,他们仍然可以使用更高优先级的流程。

相关问题