Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中使用任务并行库的目标特定CPU核?_C#_.net_Task Parallel Library_Multicore - Fatal编程技术网

C# 在.NET中使用任务并行库的目标特定CPU核?

C# 在.NET中使用任务并行库的目标特定CPU核?,c#,.net,task-parallel-library,multicore,C#,.net,Task Parallel Library,Multicore,我正在做一个项目,在那里我们需要为一些功能实现多任务。 为此,我们使用了.NET的一个伟大的API任务并行库(TPL) 例如,第三方物流代码(摘自) static void Main() { var options=new ParallelOptions() { MaxDegreeOfParallelism=2 }; List integerList=Enumerable.Range(0,10).ToList(); Parallel.ForEach(整数列表,选项,i=> { WriteLine

我正在做一个项目,在那里我们需要为一些功能实现多任务。 为此,我们使用了.NET的一个伟大的API任务并行库(TPL)

例如,第三方物流代码(摘自)

static void Main()
{
var options=new ParallelOptions()
{
MaxDegreeOfParallelism=2
};
List integerList=Enumerable.Range(0,10).ToList();
Parallel.ForEach(整数列表,选项,i=>
{
WriteLine(@“i的值={0},线程={1}”,
i、 Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine(“按任意键以存在”);
Console.ReadLine();
} 
正如我们所知,我们可以使用“MaxDegreeOfParallelism”选项来设置要使用的最大线程数。

假设我们有16个虚拟核心VM,我想运行的应用程序应该只针对少数选定的核心,如C1、C2、c8、c9。
请指导我如何使用第三方物流

谢谢,
Vijay

这种运行时的微观优化远远超出了C#的范围。而且它肯定不应该硬编码到程序本身中。NET和操作系统的负载平衡功能通常能有效地处理运行中的线程

在这种情况下,速度可能适用于:

但是,您可以在操作系统中设置此类限制,而无需查看应用程序代码:
这听起来更像是您需要/应该使用的。

这种运行时的微观优化远远超出了C#的范围。而且它肯定不应该硬编码到程序本身中。NET和操作系统的负载平衡功能通常能有效地处理运行中的线程

在这种情况下,速度可能适用于:

但是,您可以在操作系统中设置此类限制,而无需查看应用程序代码:
这听起来更像是您需要/应该使用的。

我不认为您可以在TPL抽象级别上这样做,但这可能对您有用。

我不认为您可以在TPL抽象级别上这样做,但这可能对您有用。

在TPL中不可行,但是如果你有自己的线程池,它基本上是同一个问题-有一个答案。在TPL中不可行,但如果你有自己的线程池,它基本上是同一个问题-有一个答案。坏消息:我知道相当多的应用程序这样做是为了一个好的胜利。主要是不中断线程并保持线程循环,以检查基于硬件的寄存器是否比那些说“不应硬编码”的程序更快。是的,在某些应用程序中,这就是“我赚钱”和“你赚钱”之间的区别。@TomTom在操作系统中,而不是在代码中进行关联。如果5个程序试图只在core 4上运行,那么无论机器有多少个core,您都会遇到问题。啊,但在我的特殊情况下,整个操作系统的存在只是为了运行一个程序,而这个程序是硬编码的,可以在这台特殊机器上运行。@TomTom这是实时编程。完全不同的话题仅仅用GC(比如.NET)来选择实时编程是个坏主意。你对内核的硬编码并不能使它变得更好。好吧,它对一些人有效;)GC的诀窍是不产生垃圾,你知道。坏消息:我知道很多应用程序都是这样做的。主要是不中断线程并保持线程循环,以检查基于硬件的寄存器是否比那些说“不应硬编码”的程序更快。是的,在某些应用程序中,这就是“我赚钱”和“你赚钱”之间的区别。@TomTom在操作系统中,而不是在代码中进行关联。如果5个程序试图只在core 4上运行,那么无论机器有多少个core,您都会遇到问题。啊,但在我的特殊情况下,整个操作系统的存在只是为了运行一个程序,而这个程序是硬编码的,可以在这台特殊机器上运行。@TomTom这是实时编程。完全不同的话题仅仅用GC(比如.NET)来选择实时编程是个坏主意。你对内核的硬编码并不能使它变得更好。好吧,它对一些人有效;)GC的诀窍是不产生垃圾,你知道。
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();
}