我一直在编写矩阵乘法的应用程序。
我已经完成了,并观看了资源监视器进行比较。
首先
- 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是否有可能执行我的单线程处理为多线程?
没有。JVM将有多个线程,但除非您自己创建线程(或使用Executor
等其他多线程机制),否则它不会也不能决定对程序进行多线程处理。