![多核=更好的多任务处理?](https://linux22.com/image/1373560/%E5%A4%9A%E6%A0%B8%3D%E6%9B%B4%E5%A5%BD%E7%9A%84%E5%A4%9A%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86%EF%BC%9F.png)
具体来说,我正在研究 i5-3570k 或 FX-8350,但它让我想到了一个更普遍的具体问题,即多核如何改善一般多任务处理。
我读了很多评论、基准测试等,基本上都说了同一件事:在大多数应用程序中,速度更快的 4 核 I5 胜过速度较慢的 8 核 FX,除非该应用程序经过专门编码以利用 4 个以上的核心。游戏在 i5 上运行得尤其好。
但当我阅读时,我注意到几乎所有基准测试都是在真空中进行的。也就是说,基准测试或软件是唯一要测试的东西。虽然这对于测试特定软件很有用,但这几乎不是现实世界的情况。
例如,在一天中的任何时候,我可能会打开多个浏览器和多个标签,可能是 Photoshop 或 Visual Studio,还有几个后台程序(杀毒软件、steam、keepass 等)。而且这还是在轻松的一天。
所以我的问题是:从理论上讲,虽然更快的 4 核处理器可以更快地运行单个软件,但是 8 核处理器难道不能更好地运行多个软件吗,即使它们不一定针对 8 核进行了优化?
答案1
Linux CPU 负载
一个有用的衡量标准是 Linux 的CPU 负载。基本上,将每个 CPU 核心视为 1.00 个可用负载单位,将每个以 100% 核心运行的任务视为 1.00 个已用负载单位。对于处理密集型服务器,理想负载可能正好是 CPU 核心的数量(4 个 CPU 核心的负载为 4.00)。
繁忙循环(例如“while(true)”)可能会占用一个 CPU 的 100%,即 1.00 个负载单位。单线程基准测试的峰值也为 1.00。多核优化基准测试可能会占用更多内核,在 FX-8350 上最多可达 8.00 个内核。
但是,大多数应用程序(Chrome + Firefox 开启、Photoshop、Visual Studio)在后台运行时不会消耗那么多 CPU。确实,它们可以在多个核心上运行,但如果它们仅使用 10% 的可用时间(0.10 个负载单位),那么这四个应用程序加起来只有 0.40 个负载,而且您看不到拥有多个 CPU 核心的好处。同样,忙于阻止磁盘或网络访问的应用程序在等待时不会使用 CPU 时间。
平均负载 > 4.00
如果您的应用程序负载介于 4.00 和 8.00 之间,则 FX-8350 的性能可能会在这些情况下脱颖而出。4 核 CPU 上的 5.00 负载可能会导致大量 CPU 资源争用,任务之间的任务切换会使相关开销增加。
平均负载 < 4.00
不过,您的问题似乎是关于数学计算结果不太明确的时候:在低于 4.00 的工作负载下,8 个内核是否更好。对于相当稳定的服务器类型的工作负载,您可以运行一些基准测试,看看是否真的有任何好处。对于不断变化的日常计算工作负载,没有明显的赢家。
答案2
这在很大程度上取决于应用程序、操作系统以及它如何执行其工作。
如果应用程序设计为单线程,则任何额外的核心都不会提高其性能。但是,如果操作系统足够智能,可以以这种方式分配工作,您可以使用其他核心运行其他应用程序。因此,额外的核心可能会带来一点额外的好处,尤其是对于同时运行多个应用程序的情况。
额外的核心不会提供更多的 I/O 能力。因此,如果应用程序主要受 I/O 限制,则通过增加核心来提高性能可能并不大。