2010-11-02 56 views
2

背景极限次数由工艺

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

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

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

这样做的理由是,排除一个处理器可以让服务器在服务远程桌面会话时以及使用任何其他可能需要随时使用的临时监控工具时保持更高的响应速度(Baretail, Process Explorer等)。

问题

这是可能产生给出一个CPU的资源成本的应用带来多少好处?

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

+0

我刚才的这种情况的经验是,你不应该限制你的计算密集型应用程序。即使CPU处于100%利用率,您的操作系统也应该完全响应,因为前台线程优先。 – 2011-05-01 14:06:07

回答

3

尽管我现在无法提供有关您现在如何做的大量实际事实,但我的直接反应是您说得对,并且您描述的当前方法是错误的。

我建议的是减少长时间运行的进程的执行优先级。在一个典型的情况下,任何低于正常水平的工作都会同样好。这使得进程只要没有其他需要的资源就可以使用所有可用的资源,但是会在/如果需要时将所有必需的资源用于其他进程。

+1

+1 - 允许Windows根据优先级管理线程的想法也发生在我身上 - thx用于支持我关于 – 2010-11-02 17:46:21

+0

编辑的想法:将'硬性事实'改为'说服参数';-) – 2010-11-03 08:40:26