多线程Java无法完全使用Windows上的所有操作系统核心

时间:2015-05-30 20:56:35

标签: java windows multithreading ubuntu jvm

我有两台机器具有完全相同的硬件设置: Intel i7 CPU(4核,8线程或虚拟核)16GB内存。唯一的区别是一台机器运行Windows 7,另一台机器运行Ubuntu。

我的多线程程序有8个线程执行类似的任务。我注意到,当它在Windows机器上运行时,只有4个虚拟内核运行,CPU占用率为30%,其余4个虚拟内核的CPU使用率为0。当相同的程序在Ubuntu机器上运行时,所有8个虚拟核心的CPU使用率大致相等,为30%。

此外,该程序在Ubuntu机器上的运行速度要快得多。

为什么java不使用Windows上的所有CPU核心? jre / OS设置有什么特别之处吗?

有关系统信息的更多详细信息:

  • Windows 7 64位,Oracle 64位java 1.7
  • Ubuntu 14.04 LTS 64位,OpenJDK 64位java 1.7

有关任务的更多详细信息:

  • 一个线程读取文件,启动实例,将它们提供给输入缓冲区(LinkedBlockingQueue)。
  • 八个线程计算每个给定实例的一些度量。计算结果被送到输出缓冲区(LinkedBlockingQueue)。
  • 一个线程将结果写入文件(这里是一种密集的I / O)。

0 个答案:

没有答案