在 Windows 中设置永久进程 CPU 核心亲和性

在 Windows 中设置永久进程 CPU 核心亲和性

我打算购买一个新的 CPU,并且正在考虑四核 i5。

使用四核的原因是我通常进行很多多任务处理,例如同时运行 Visual Studio、Eclipse Aptana、Photoshop、Lightroom 和许多 Chrome 浏览器。

  1. 我想知道是否可以永久分配某些进程(例如 Visual Studio)来使用特定的核心,并且是否有比 Windows 任务管理器更好的工具来实现这一点?

  2. 这会给我带来更快的多任务处理体验吗?还是我不会注意到其效果?

  3. 我还计划将内存从 3GB 升级到 8GB,因为在打开多个 IDE 并使用 Chrome 的开发人员工具进行几个小时的 Web 开发后,我遇到了严重的抖动。额外的 RAM 是否足够,或者我需要更快的 CPU?(目前运行的是 Core 2 Duo E6750 @ 2.66ghz)

答案1

一般来说,您不会注意到将特定进程放在特定核心上的影响,因为 Windows 通常非常擅长在核心之间调度项目,尤其是在考虑到这种情况的 Windows 7 上。

我发现,通常情况下,繁忙的任务会将大部分时间(对于普通应用程序通常为 60% 以上,对于单线程游戏通常为 95% 以上)花在一个核心上,而当事情变得更加繁忙时,Windows 会将其他任务安排在其他核心上,所以我不必担心。我似乎记得读过 Windows 7 能够分辨出系统中哪些核心是“首选”,因此在使用其核心的英特尔系统上涡轮增压功能(使用第一个核心上的活动来判断是否需要加速)和超线程,那么 Windows 将倾向于在第一个核心上安排单线程任务,然后优先将多线程任务分配给“真实”核心,然后再分配给超线程“虚拟”核心。我已经在我的 i7(四核,8 个超线程核心)上看到了这一点,它运行得很好,游戏几乎只使用第一个核心,然后在备用“真实”核心上适度使用。

我发现指定亲和力唯一有用的时候是使用某些对多处理器友好但似乎存在时间问题的媒体播放器观看视频时。Mediaplayer 经典家庭影院版当您开始在视频中向前跳过时,似乎会“跳跃”很多,大概是因为它使用多个线程来解码,并且它们在核心之间不能很好地同步,在这种情况下将其设置为仅使用一个 CPU 就会停止跳跃。

如果你确实需要更改 CPU 亲和性,可以使用以下几个工具:

先跑通过确保旧程序仅在系统中第一个可用的 CPU 上运行,有助于修复旧程序。

这篇评论Toms Hardware 上有一个工具可以自动重新分配任务亲和性,但他们提供的链接似乎已损坏,而且现在似乎有点难找到。我认为这个程序必须在您希望它分配亲和性时一直运行。看起来你可以得到它这里

但总的来说,我认为手动分配亲和力不会带来任何实际好处,而且我认为随着软件的不断改进,这种做法已经基本消失。

说实话,我认为 8GB 内存足以满足您的需求,但我没有使用您使用的工具的实际经验。我可以说,在 6GB 系统上,当我运行多个虚拟机和运行 IDE(eclipse)时,我从未感觉到系统因硬盘抖动而变慢...

答案2

为特定可执行文件分配 CPU 亲和性并不是一个好主意。设置进程亲和性并不会为您指定的进程保留 CPU,从而阻止所有其他进程使用该 CPU。它只是表示该进程只能使用指定的 CPU。

这是一个问题,因为需要 CPU 时间的进程比您通常知道的进程要多得多。如果您使用亲和性将进程绑定到 CPU 0,而当您的进程恰好需要 CPU 时,其他进程正在使用 CPU 0,那么您的进程根本无法运行,直到其他进程使用 CPU 0 完成。

逃到某个地方比无处可去要好得多,而无处可去是设置亲和力的常见结果。

将进程的亲和性设置为单个 CPU 的另一个可怕结果是,您将该进程的所有线程都限制在一个 CPU 上。从而消除了多线程可能具有的任何性能优势。

简而言之,让 Windows 调度程序自行完成任务即可。您给它的选项越少,它完成的任务就越差。

答案3

Jamie 是对的,但是有些主流程序在单线程上运行得更好,比如 AutoCAD,我确实将它分配给一个核心,它运行得更快,延迟更少。话虽如此,AutoCAd 的其他组件(如打印)在执行此操作时会显得慢一些,因为这些过程可能适合多核功能。很遗憾,该软件仍然没有针对多核系统进行很好的优化!!!

相关内容