我有一个带有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());
答案 0 :(得分:1)
您的CPU是应该使用的资源。没有人会感谢你,如果它闲逛。所以限制你的过程毫无意义。您甚至不知道当时是否有其他人在使用计算机。
您可以使用您自己的TaskScheduler实施来影响将启动的任务的次数和次数。
但同样,没有意义。您应该尽可能多地请求 。如果您希望对其他用户友善,请降低您的流程优先级,因此如果您想要100%使用,他们仍然可以使用更高优先级的流程。