我有一个用 C++ 编写的本机多线程Win32应用程序,它有大约 3 个相对繁忙的线程和 4 到 6 个不做那么多的线程。当它以正常模式运行时,在 8 核机器上的总 CPU 使用率加起来约为 15%,应用程序在大约 30 秒内完成。当我通过将关联掩码设置为0x01
它来将应用程序限制为仅一个核心时,它会在 23 秒内更快地完成。
我猜这与限制在一个物理内核和/或一些并发内存访问问题时同步更便宜有关。
我正在运行 Windows 7 x64,应用程序是 32 位的。CPU 是 Xeon X5570,具有 4 个内核并启用了 HT。
谁能详细解释这种行为?为什么会发生这种情况以及如何提前预测这种行为?
更新:我想我的问题不是很清楚。我想知道为什么它在一个物理核心上变得更快,而不是为什么它在多个核心上没有超过 15%。