【发布时间】:2023-07-17 23:08:02
【问题描述】:
我一直在写一个矩阵乘法的应用程序。
我已经完成并观看了资源监视器以进行比较。
首先
- 3000x3000 矩阵相乘。
- 单线程比多线程慢
- 当我检查 Windows 资源监视器时,我看到多线程应用程序的线程数比单线程数多。我检查了“javaw.exe”,即使我编写单线程应用程序,它的线程也比一个多。那不是关于我的。那是关于“javaw.exe”本身的。但长话短说,带有单线程的 javaw 显示 - 例如 - 16 个线程。多线程显示 - 例如 - 24。
- 在多线程应用程序工作时,CPU 使用率几乎达到 100%。大多数使用属于“javaw.exe”。但在单线程应用中,使用率约为 30-35%
我有一个 i5 CPU。双核的。 4核逻辑。
当我检查 Windows 资源监视器时,对于多线程应用程序,CPU 0-1-2-3 的使用率再次接近 100%。
但在单线程应用程序中,CPU 0-1-2-3 仍在使用。大约相同的百分比,但甚至不接近 100%。
这是我的问题。当我执行单线程应用程序时,谁在使用其他内核?当然,任何其他进程都可以使用它们。甚至是“javaw.exe”本身(我告诉自己,它是多线程的)。但是JVM有没有可能将我的单线程进程作为多线程执行?
【问题讨论】:
-
JVM总是执行多个线程(例如GC线程)。
-
是的,我是这么认为的。谢谢你纠正我。我认为没有办法通过 JVM 将单线程应用程序转换为多线程,对吧?
标签: java multithreading