我正在做一个项目,在那里我们需要实现一些功能的多任务处理。为此,我们使用了.NET的一个伟大的API-任务并行库(TPL(。
例如。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。
请指导我如何使用TPL完成这项工作?
谢谢,Vijay
这种运行时的微优化远远超出了C#的范围。并且它应该绝对不被硬编码到程序本身中。一般来说,.NET和操作系统的负载平衡功能将有效地处理正在运行的线程。
有了这种差异,速度咆哮可能会适用:https://ericlippert.com/2012/12/17/performance-rant/
但是,您可以在操作系统中设置这样的限制,甚至无需查看应用程序代码:https://www.techjunkie.com/restrict-apps-cpu-cores-processor-affinity/这听起来更像是你需要/应该使用的。
我不认为您可以在TPL抽象级别上做到这一点,但这个答案可能对您有用。