2016-05-15 56 views
0

我一直在写一个矩阵乘法的应用程序。Java单线程CPU使用和多线程CPU使用

我已经完成并观察资源监视器进行比较。

所有

  1. 3000x3000矩阵的第一相乘。
  2. 单线程比多线程慢
  3. 当我检查Windows资源监视器时,我发现多线程应用程序比单线程有更多的线程。我检查了“javaw.exe”,即使我编写单线程应用程序,它的线程数也多于一个。这不是关于我的。这是关于“javaw.exe”本身。但长话短说,javaw与单线程显示 - 例如 - 16线程。多线程显示 - 例如 - 24.
  4. 虽然多线程应用程序工作,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像多线程一样执行我的单线程进程?

+1

JVM总是执行多个线程(例如GC线程)。 –

+0

是的,我认为。感谢您纠正我。我认为没有办法将单线程应用程序转换为JVM的多线程,对吧? – Diga

回答

1

但是有没有可能JVM执行我的单线程 进程为多线程?

号JVM将有多个线程,但它不会也不能随便决定,除非你自己创建的线程多线程程序(或使用其他一些多线程机制像Executor)。

+0

感谢您的回答。我知道这没有任何意义。但我想仔细检查。 – Diga