Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# C语言中的处理器、内核和各种其他功能#_C#_.net - Fatal编程技术网

C# C语言中的处理器、内核和各种其他功能#

C# C语言中的处理器、内核和各种其他功能#,c#,.net,C#,.net,我正在编写一个资源密集型应用程序,我正在试图找到一种方法,让上述应用程序的用户决定应用程序应该使用哪些资源 这里的部分问题是了解CPU的功能->我想如果用户希望应用程序在AMD Phenom II X6上使用5个内核,我可以将所有东西都扔到这5个内核上。另一方面,如果处理器是Intel i7或AMD FX-8510,则其中一些内核共享各种组件。那么我应该怎么做,以确保我不会意外地向hyper threader scheduler计划某些内容,或者达到那种程度 我试图避免CPU阻塞的情况,因为我把

我正在编写一个资源密集型应用程序,我正在试图找到一种方法,让上述应用程序的用户决定应用程序应该使用哪些资源

这里的部分问题是了解CPU的功能->我想如果用户希望应用程序在AMD Phenom II X6上使用5个内核,我可以将所有东西都扔到这5个内核上。另一方面,如果处理器是Intel i7或AMD FX-8510,则其中一些内核共享各种组件。那么我应该怎么做,以确保我不会意外地向hyper threader scheduler计划某些内容,或者达到那种程度


我试图避免CPU阻塞的情况,因为我把所有东西都扔到了错误的部分(这是一个老问题)。有什么想法吗

操作系统中的线程调度程序具有有效CPU资源分配所需的所有信息(物理CPU核数、哪些逻辑核共享资源、哪些核停在安全能源位置、如果启用了超读、哪些核使用turbo频率、其他程序使用哪些资源等)。你们的程序对这些事情一无所知,所以你们能做的最好的事情就是让操作系统决定如何分配资源。即使在您的程序中没有任何特殊支持,用户也可以通过设置进程优先级或处理器相关性来限制程序使用的资源


您可以尝试的一件事是根据CPU核心数(由Environment.ProcessorCount返回)创建线程数。如果您认为每个物理核调度一个线程(而不是每个逻辑核调度一个线程)的性能会更好,那么可以使用Process.GetCurrentProcess().ProcessorAffinity属性-在具有超线程的CPU上将其设置为0x5555,但这也会使情况比以前更糟(如果将来某个CPU的每个物理核将有3个逻辑核而不是2个,或者如果另一个程序集处理器与相同的核有关联,该怎么办?)。

操作系统中的线程调度程序具有所有必要的信息(物理CPU内核的数量,哪些逻辑内核共享资源,哪些内核停驻在安全能源,如果启用了超读,哪些内核使用turbo频率,其他程序使用哪些资源,等等。)对于高效的CPU资源分配。您的程序不知道这些事情,所以您可以做的最好的事情是让操作系统决定如何分配资源。即使您的程序中没有任何特殊支持,用户也可以通过设置进程优先级或处理器相关性来限制程序使用的资源


您可以尝试的一件事是根据CPU核心的数量(由Environment.ProcessorCount返回)创建线程的数量。如果您认为每个物理核心调度一个线程(而不是每个逻辑核心调度一个线程)会执行得更好,那么您可以使用Process.GetCurrentProcess().ProcessorAffinity属性-在具有超线程功能的CPU上,将其设置为0x5555,但这也会使情况变得比以前更糟(如果将来的某个CPU每个物理核将有3个逻辑核,而不是2个,或者如果另一个程序集处理器与相同的核有亲缘关系,该怎么办?)不应该有什么特别的事情需要做。操作系统已经提供了足够的工具来允许应用程序的用户控制CPU资源的使用。在应用程序级别,你通常会处理更多的事情,比如内存和I/O.Perhaps,你应该考虑用更低级的语言编写你的应用程序来进行控制哟。u want.C#.NET可能不够好,无法实现您想要的目标。我不理解“将所有东西都扔到cpu的错误部分”?我同意Sanjeevakumar-.NET是托管代码。你考虑过仅仅更改线程优先级吗?在空闲机器上只使用一小部分内核是浪费。啊,让我解释一下。我想让用户能够说“接受这7个内核,但保留1个,这样我仍然可以浏览web和做其他基本的事情。”我知道这种控制有多好,因为我使用虚拟机和其他程序,我喜欢知道我愿意牺牲哪些内核。你不需要做什么特别的事情。操作系统已经提供了足够的工具,允许应用程序的用户控制其CPU资源的使用。在应用程序级别,你可以Sualy对内存和I/O.Perhaps之类的东西进行更多的处理时,你应该考虑用你所需要的控制语言来编写你的应用程序。?我同意Sanjeevakumar-.NET是托管代码。你考虑过仅仅更改线程优先级吗?在空闲机器上只使用一小部分内核是浪费。啊,让我解释一下。我想让用户能够说“接受这7个内核,但保留1个,这样我仍然可以浏览web和做其他基本的事情。”我知道这种控制有多好,因为我使用虚拟机和其他程序,我喜欢知道我愿意牺牲哪些内核。这是处理器亲和力的一个有趣用法。这是处理器亲和力的一个有趣用法。