Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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中的超线程_C#_.net_Multithreading_Hyperthreading - Fatal编程技术网

C# 如何最大限度地利用.Net中的超线程

C# 如何最大限度地利用.Net中的超线程,c#,.net,multithreading,hyperthreading,C#,.net,Multithreading,Hyperthreading,不确定这在托管语言中是否可行,但是否有可能在存在超线程的情况下使应用程序执行得更好 代码中是否有具体的操作,也许某些功能在HT环境中运行得比其他功能更好 我知道要从多线程中获益,所需要的只是产生新的线程来执行繁重的cpu任务,但我不确定HT需要什么?很大程度上取决于您拥有的实际硬件。阅读更多关于部门分析的信息。Slava在链接中的观点是,在HT中,虚拟核心共享缓存,虚拟核心工作负载可能会破坏“主”核心的缓存,即使它最多只能完成与主核心相比的约20%的工作负载,因为它会逐出主核心的热缓存,这会导致

不确定这在托管语言中是否可行,但是否有可能在存在超线程的情况下使应用程序执行得更好

代码中是否有具体的操作,也许某些功能在HT环境中运行得比其他功能更好


我知道要从多线程中获益,所需要的只是产生新的线程来执行繁重的cpu任务,但我不确定HT需要什么?

很大程度上取决于您拥有的实际硬件。阅读更多关于部门分析的信息。Slava在链接中的观点是,在HT中,虚拟核心共享缓存,虚拟核心工作负载可能会破坏“主”核心的缓存,即使它最多只能完成与主核心相比的约20%的工作负载,因为它会逐出主核心的热缓存,这会导致主堆芯失速,总体性能比不带HT时更差

但是自从这篇文章发表以来,很多事情都发生了变化,HT post的情况明显好转

我知道要从多线程中获益,只需 生成新线程以执行繁重的cpu任务


这是一个相当幼稚的观点。你必须阅读(它们也适用于托管应用),并且你必须完全理解

很大程度上取决于您拥有的实际硬件。阅读更多关于部门分析的信息。Slava在链接中的观点是,在HT中,虚拟核心共享缓存,虚拟核心工作负载可能会破坏“主”核心的缓存,即使它最多只能完成与主核心相比的约20%的工作负载,因为它会逐出主核心的热缓存,这会导致主堆芯失速,总体性能比不带HT时更差

但是自从这篇文章发表以来,很多事情都发生了变化,HT post的情况明显好转

我知道要从多线程中获益,只需 生成新线程以执行繁重的cpu任务


这是一个相当幼稚的观点。你必须阅读(它们也适用于托管应用),并且你必须完全理解

这是一个非常广泛的问题,你最好在programmers.stackexchange.com上提问;您是否在问,是否有一种方法可以优化.NET程序以处理超线程环境(其中有“虚拟”CPU),而不是有那么多“真实”CPU的环境?或者你的问题仅仅是“我如何利用多个核心?”而不管这些核心是真实的还是虚拟的?编辑了答案以消除一些困惑,希望我删除的足够多以便回答@Ericlippert让超线程“虚拟”内核看起来像真实内核是操作系统的工作。除非你正在编写一个操作系统或其他软件,它依赖于处理器工作的细节,否则我不会担心它。对待超线程内核就像对待硬件内核一样。这是一个非常宽泛的问题,最好在programmers.stackexchange.com上提问;您是否在问,是否有一种方法可以优化.NET程序以处理超线程环境(其中有“虚拟”CPU),而不是有那么多“真实”CPU的环境?或者你的问题仅仅是“我如何利用多个核心?”而不管这些核心是真实的还是虚拟的?编辑了答案以消除一些困惑,希望我删除的足够多以便回答@Ericlippert让超线程“虚拟”内核看起来像真实内核是操作系统的工作。除非你正在编写一个操作系统或其他软件,它依赖于处理器工作的细节,否则我不会担心它。对待超线程内核就像对待硬件内核一样。因此,您的意思是,在HT机器上运行时,应该对用户线程的启动方式进行优化,因为在物理CPU上并行执行的方式不同于在多核CPU上并行执行的方式。但既然没有专门的API,那么这样做值得吗?我知道,对于BizTalk和SQL Server,MS建议禁用HT,并警告在该模式下性能会低于最佳状态,但对于只需要在工作线程中执行某些操作的应用,您有什么建议?@marceln:我的建议是:设置性能目标。衡量你是否达到了目标。如果你这样做了,就请一下午的假去海滩。如果你没有,拿出一个分析器,优化最慢的东西。由于超线程处理器上涉及缓存位置的微妙问题,工作线程变慢的几率非常低。你能描述一下你的工作线程在做什么吗?@EricLippert:我同意,我喜欢认为这是每一个优秀的开发人员在这种情况下采取的行动。但是,知道在较低级别上会发生什么事情并没有什么坏处(谢谢Remus)。因此,您的意思是,在HT机器上运行时,应该对用户线程的启动方式进行优化,因为在物理CPU上执行并行的方式与在多核CPU上执行并行的方式不同。但既然没有专门的API,那么这样做值得吗?我知道,对于BizTalk和SQL Server,MS建议禁用HT,并警告在该模式下性能会低于最佳状态,但对于只需要在工作线程中执行某些操作的应用,您有什么建议?@marceln:我的建议是:设置性能目标。衡量你是否达到了目标。如果你这样做了,就请一下午的假去海滩。如果你没有,拿出一个分析器,优化最慢的东西。由于超线程处理器上涉及缓存位置的微妙问题,工作线程变慢的几率非常低。你能描述一下你的工作线程在做什么吗?@EricLippert:我同意,我喜欢认为这是每一个优秀的开发人员在这种情况下采取的行动。但是,它从来就不是胡