在 .NET 中使用任务并行库针对特定 CPU 个核心?

Target specific CPU Cores with Task Parallel Library in .NET?

我正在做一个项目,我们需要为某些功能实现多任务处理。 为此,我们使用了 .NET 中最出色的工具之一 API - 任务并行库 (TPL)。

例如。 TPL 代码(取自 here

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 完成它?

谢谢, 维杰

这种运行时的微优化超出了 C# 的范围。而且它应该 绝对 不应该被硬编码到程序本身。通常,.NET 和 OS 的负载平衡功能将有效地处理 运行 个线程。

对于这种差异,可能会出现速度咆哮:https://ericlippert.com/2012/12/17/performance-rant/

然而,您可以在 OS 中设置此类限制,甚至无需查看应用程序代码:https://www.techjunkie.com/restrict-apps-cpu-cores-processor-affinity/ 这听起来更像是您 need/should 使用的。

我不认为你可以在 TPL 抽象级别上做到这一点,但这个 answer 可能对你有用。