我在做一个项目,我们需要为一些功能实现多任务。为此,我们使用了.NET的一个伟大的API -任务并行库(TPL)。
例如:第三方物流代码(取自这里)
static void Main()
{
var options = new ParallelOptions()
{
MaxDegreeOfParallelism = 2
};
List<int> integerList = Enumerable.Range(0,10).ToList();
Parallel.ForEach(integerList, options, i =>
{
Console.WriteLine(@"value of i = {0}, thread = {1}",
i, Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("Press any key to exist");
Console.ReadLine();
} 如我们所知,我们可以使用'MaxDegreeOfParallelism‘选项来设置要使用的最大线程。
假设我们有16个虚拟核心VM,我想运行的应用程序应该只针对少数选定的核心,比如C1、C2、c8、c9。
请指导我如何使用第三方物流?
谢谢你,维杰
发布于 2020-04-30 12:09:57
这种运行时的微优化远远超出了C#的范围。而且,绝对不应该将硬编码到程序本身中。通常,.NET和OS的负载平衡特性将有效地处理运行中的线程。
有了这样的差别,速度暴涨可能适用于:https://ericlippert.com/2012/12/17/performance-rant/
但是,您可以在操作系统中设置这样的限制,甚至无需查看应用程序代码:https://www.techjunkie.com/restrict-apps-cpu-cores-processor-affinity/ --这听起来更像是您需要/应该使用的东西。
发布于 2020-04-30 12:11:22
我不认为您可以在TPL抽象级别上这样做,但是这个回答可能对您有用。
https://stackoverflow.com/questions/61522970
复制相似问题