代码之家  ›  专栏  ›  技术社区  ›  Adam Ralph

限制进程使用的处理器数量

  •  2
  • Adam Ralph  · 技术社区  · 14 年前

    背景

    我目前正在重构旧的.NET应用程序。应用程序在相对较长的时间段(最多几个小时)内执行复杂的数学计算,在此期间,在多个线程上几乎连续地使用处理器。

    每个用户都有一台8核机器,专门用于运行应用程序的一个实例(他们使用其他机器运行所有其他应用程序)。应用程序使用共享系统帐户执行,该帐户允许支持人员在需要时通过远程桌面连接到计算机并监视应用程序(这种情况经常发生)。

    当应用程序进程启动时,它会设置自己的处理器关联性,从而允许进程使用除一个处理器以外的所有处理器。例如,在8处理器计算机上,关联设置为0x007F(01111111),它将应用程序限制为处理器1到7,并阻止它在处理器8上执行任何线程。排除的处理器总是由关联值中的最高位表示的处理器。

    这样做的理由是,排除一个处理器后,机器在服务远程桌面会话以及使用任何其他可能需要不时使用的特别监视工具(Baretail、Process Explorer等)时可以保持更高的响应能力。

    问题

    考虑到一个CPU的资源对应用程序的成本,这可能会带来很多好处吗?

    显然,我可以执行一些测试来收集经验证据,但是测试机器的可用性是有限的,并且应用程序的行为具有许多外部依赖性,这意味着很难确定密集处理器使用的时间。正确地对其进行基准测试所需的时间和资源可能远不是微不足道的。出于这个原因,我正在寻找理论上的理由支持或反对这样做。在我看来,这是一个坏主意,因为应用程序无法使用整个CPU的资源,而其他进程不太可能完全消耗这些资源。我想消除处理器限制,允许Windows无限制地管理CPU分配。但是,我需要能够展示一些 硬性事实 如果我的怀疑是正确的,为了推销这一变化而进行的令人信服的论证。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Jerry Coffin    14 年前

    虽然我不能提供很多关于你现在如何做的事实,但我的直接反应是你是对的,你描述的当前方法是错误的。

    相反,我建议减少长时间运行的进程的执行优先级。在一个典型的情况下,任何低于正常值的事情都会同样有效。这允许流程使用所有可用的资源,只要没有其他需要的资源, 但是 在需要时,将所有必要的资源分配给其他流程。