我的程序使用预定数量的线程,每个线程都独立工作。我使用 i7-2600 CPU,但我关闭了超线程模块,因此它在 4 个内核上运行 4 个线程。当我用 1 个线程运行程序时,CPU 使用率为 25%,这是完美的,因为 1 个线程已被完全使用,但是当我运行 4 或 3 个线程时,我只得到 60% 的 CPU,为什么?
就像我之前提到的那样,线程是完全独立的(没有锁也没有争用),当我用 1 个线程运行程序 4 次时,我得到 100% 的 CPU 使用率(即,当每个进程的 1 个线程的 4 个进程我得到正确的CPU使用率)
有任何想法吗?
更多信息:
- 在处理所有需要的数据时我没有使用 I/O,所有需要的数据都加载到内存中,每个线程在处理之前加载自己的数据。
- 我确实从数据库加载数据(使用 oleDb),但我描述的问题发生在加载之后,而所有线程都在处理(没有加载完成)。
- 数字是:
- 2 个线程大约 40% 而不是 50 个(每个线程 85%)。
- 3 个线程大约 50% 而不是 75 个(每个线程 65%)。
- 4 个线程大约 60% 而不是 100 个(每个线程 60%)。
- 我使用具有 16GB 内存的 i7 2600,但该进程的内存使用量并不接近。
- 我运行 Windows 性能监视器来查找没有争用。