为什么要为线程设置ProcessorAffinity?

时间:2013-08-14 14:19:34

标签: c# .net multithreading processor affinity

我一直无法找到一个很好的解释,为什么多线程可执行文件想要为每个线程设置ProcessorAffinity。对我来说,似乎这是试图覆盖CLR /操作系统;我不认为我足够聪明的事情。

为什么我要参与为多核系统上的线程设置ProcessorAffinity?

3 个答案:

答案 0 :(得分:2)

如果告诉某个线程以非设置的亲和力运行,那么它将被允许在任何核心上运行。然而,这意味着当一个核心忙时,它会将你的线程移动到另一个核心,这种停止和可能的移动被称为Context Switch。在大多数情况下,你永远不会注意到它,但是,在游戏机等情况下,上下文切换可能是一个非常昂贵的过程。

在这些情况下,最好将音频循环和视频循环之类的东西移动到锁定到该核心的“私有”核心,因此不会切换,从而提供可能的优化。

答案 1 :(得分:1)

只有非常特定类型的应用程序才能真正受益于手动线程关联的使用,主要是具有长时间运行的并行进程的应用程序。我可以想象它被用于病毒扫描程序或Seti @ Home等数学繁重的应用程序。

另一个理论上的优势是,如果您有多次运行的小进程,处理器可以使用其缓存。但同样,实际上你需要一种非常特殊的应用程序才能使差异显着。

我从来没有必要打扰它。通常操作系统最了解。

答案 2 :(得分:0)

处理器缓存。

可以用它来节流 可能有较低优先级的流程,您不想占主导地位 在4处理器的机器上可以将其限制为一个处理器 节流也可以通过线程优先级完成 如果该过程受益于缓存,则仅使用此方法 我喜欢它,因为在任务管理器中我可以看到它锤击一个CPU。