【问题标题】:Multiple threads in JVM - when are they using multiple cores?JVM 中的多个线程 - 它们何时使用多个内核?
【发布时间】:2013-10-01 00:12:55
【问题描述】:

我最近有机会听到另一个关于 JVM 的讨论。据说Java虚拟机在并发方面构建得很好。对于我认为是一个简单的问题,我找不到任何令人满意的答案:当 JVM 运行多线程(因此使用多个虚拟内核,对吗?)时,它是否使用了机器 CPU 的多个真实内核?

我听到“不总是”或“有时”作为答案;那么有什么方法可以确保当我们设计代码以运行多个线程时,JVM 也将使用 CPU 的多个内核?或者反过来说,是什么决定了JVM是否使用了多个CPU核?

我无法举例说明何时需要这样做,但我觉得这很有趣,因为我知道设计师喜欢在他们的项目中确定一切。如果实际上它们永远不会被并行计算,那么在一些大型应用程序中拥有多个线程的真正意义何在?

【问题讨论】:

    标签: java concurrency jvm multicore


    【解决方案1】:

    Java 线程,像常规线程一样,可能被调度为使用多个内核。并发编程的真正棘手之处在于,很难“强制”一个程序使用 X 个内核并让该线程在该内核上运行等等。换句话说,是确定性的。

    这最终取决于操作系统,在某种意义上也取决于硬件。但归根结底,程序员应该抽象地考虑并发编程,并相信调度程序正在完成它的工作。

    换句话说,是的。

    【讨论】:

      【解决方案2】:

      在所有主流的现代 jvm 中,java 线程是“真正的”操作系统线程,因此将像任何其他操作系统线程一样跨内核调度。

      【讨论】:

      • 在这种情况下,JVM的每个线程是否都获得与JVM本身相同的优先级?
      • @Byakuya 您可以使用 setPriority() 设置各个 Java 线程的优先级。这实际上意味着什么将取决于 JVM 和操作系统。
      猜你喜欢
      • 2020-12-14
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多