【问题标题】:Multithread in Java with multicores processor [duplicate]具有多核处理器的Java中的多线程[重复]
【发布时间】:2015-01-18 21:24:29
【问题描述】:

我对使用多核处理器的 Java 中的多线程有疑问。据我所知,当有单核处理器时,多线程工作,因为每个线程都会从 cpu 时间获得一个切片来运行,现在我们有了多核处理器,正如我所假设的,JVM 也会更新以获得这个优势,不是吗?或者不是,这就是为什么在 Java 7 中引入 fork/join 框架进行多处理的原因?
非常感谢。

【问题讨论】:

  • JVM 从第一个版本开始就支持多线程。 Fork/Join 是一种解决问题的特殊方法。我很难知道您的实际问题是什么?
  • 哪个JVM?我确信大多数 JVM 实现在执行多线程代码时会利用多核。但这确实取决于实施。 Fork/Join 框架是一个使用 java.lang.Thread 的更高级别的库。
  • 我很确定线程在哪个物理内核上运行的想法已被操作系统本身抽象掉了。因此,如果您的语言完全支持线程,那么它将支持在多个内核上运行线程,因为它不知道
  • @MrWiggles 最初只支持“绿色线程”。
  • 如果问题真的只是“JVM 可以使用多核吗”,这将非常容易测试。只需编写一个定义 Runnable 的小程序,它会永远做一些工作(Random r = new Random(); while (true) { r.nextInt(); } 会做),然后启动 20 个使用该可运行对象的线程。运行它,然后查看您的 CPU 利用率。

标签: java multithreading


【解决方案1】:

是的,当有一个单核处理器时,每个线程将获得一部分 CPU 时间来运行。

是的,当有多个内核时,它们将分布在它们之间。但是如果线程多于内核(包括计算机中运行的其他进程/程序的线程),它们也只会获得 CPU 的一部分。

如果您有单线程,并且想要生成更多线程以便每个线程都可以执行部分​​工作,那么稍后您将不得不加入它们的结果。执行这种分叉(从一个线程到多个线程的数据)和连接(从多个线程到一个线程的数据)比最初看起来要复杂得多,这就是 Java 7 中引入 fork/join 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多