【问题标题】:Why set the ProcessorAffinity for a thread?为什么要为线程设置 ProcessorAffinity?
【发布时间】:2013-08-16 13:22:03
【问题描述】:

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

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

【问题讨论】:

  • 有没有人看到任何数字表明设置 ProcessorAffinity 总体上有好处?
  • @MartinJames:Windows 对特定调用使用亲和力。在多核系统上,Windows 将这些分配给 core0。如果你不想和他们竞争,你可能想换一个核心。

标签: c# .net multithreading processor affinity


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    我从来没有需要打扰它。通常操作系统最清楚。

    【讨论】:

      【解决方案3】:

      处理器缓存。

      并且可以用它来节流。
      可能有您不想控制的优先级较低的进程。
      在 4 个处理器的机器上可以将其限制为一个处理器。
      节流也可以用线程优先级来完成。
      只有当进程从缓存中受益时才会使用它。
      我喜欢它,因为在任务管理器中我可以看到它正在敲打一个 CPU。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多