我一直无法找到一个很好的解释来解释为什么多线程可执行文件要为每个线程设置 ProcessorAffinity。对我来说,这似乎是在试图覆盖 CLR/操作系统;我认为我不够聪明去做的事情。
为什么我要参与为多核系统上的线程设置 ProcessorAffinity?
我一直无法找到一个很好的解释来解释为什么多线程可执行文件要为每个线程设置 ProcessorAffinity。对我来说,这似乎是在试图覆盖 CLR/操作系统;我认为我不够聪明去做的事情。
为什么我要参与为多核系统上的线程设置 ProcessorAffinity?
如果您告诉线程以未设置的亲和力运行,那么它将被允许在任何核心上运行。然而,这意味着,当一个核心很忙时,它会将您的线程移动到另一个核心上,这种停止和可能的移动称为Context Switch。在大多数情况下,您永远不会注意到它,但是,在游戏机等情况下,上下文切换可能是一个非常昂贵的过程。
在这些情况下,最好将音频循环和视频循环之类的东西移动到“私有”核心上,在那里它们被锁定到该核心,因此不会切换,从而提供可能的优化。
只有非常特定类型的应用程序真正受益于使用手动线程亲和性,主要是具有长时间运行的并行进程的应用程序。我可以想象它被用于病毒扫描程序,或者像 Seti@Home 这样的数学繁重的应用程序。
另一个理论上的优势是,如果您有多次运行的小进程,处理器可以利用其缓存。但同样,实际上您需要一种真正特定类型的应用程序才能使差异显着。
我从来没有需要打扰它。通常操作系统最清楚。
处理器缓存。
并且可以用它来节流。
可能有您不想控制的优先级较低的进程。
在 4 处理器机器上可以将其限制为一个处理器。
节流也可以通过线程优先级来完成。
仅当进程从缓存中受益时才会使用它。
我喜欢它,因为在任务管理器中我可以看到它正在敲打一个 CPU。