【问题标题】:Why Fork/Join framework was introduced when all JAVA threads are Native threads created using OS libraries?当所有的 JAVA 线程都是使用 OS 库创建的 Native 线程时,为什么要引入 Fork/Join 框架?
【发布时间】:2020-11-08 21:19:19
【问题描述】:

我所知道的是,在 JDK 1.2 之后,所有 Java 线程都是使用“本机线程模型”创建的,该模型在 JNI 和 OS 线程库的帮助下将每个 Java 线程与一个 OS 线程相关联。

所以从下面text我相信现在所有创建的Java线程都可以实现多核处理器的使用:

多个本机线程可以共存。因此也称为多对多模型。该模型的这种特性使其能够充分利用多核处理器并同时在单独的单个内核上执行线程。

但是当我在JAVA The Compelete Reference 中读到关于 JDK 7 中引入的 Fork/Join Framework 的介绍时:

虽然最初的并发 API 本身就令人印象深刻,但它在 JDK 7 中得到了显着扩展。最重要的新增功能是 Fork/Join 框架。 Fork/Join 框架有助于创建使用多个处理器的程序(例如多核系统中的那些)。因此,它简化了程序的开发,其中两个或多个部分以真正的同时执行(即真正的并行执行),而不仅仅是时间片。

这让我质疑为什么自 JDK 3 以来存在“Java 原生线程模型”时才引入该框架?

【问题讨论】:

    标签: java multithreading operating-system java-7


    【解决方案1】:

    Fork join 框架并没有取代原来的低级线程 API;它可以更轻松地用于某些类别的问题。

    原始的低级线程 API工作:您可以使用系统上安装的所有 CPU 和 CPU 上的所有内核。如果您曾经尝试实际编写多线程应用程序,您很快就会意识到这很困难。

    低级线程 API 适用于线程在很大程度上独立且不必在彼此之间共享信息的问题 - 换句话说,embarrassingly parallel problems。然而,许多问题并非如此。使用低级 API,很难以安全(产生正确的结果并且不会产生死锁等不良影响)和高效的方式实现复杂的算法(不浪费系统资源)。

    Java fork/join 框架是fork/join model 上的一个实现,它是作为一种高级机制创建的,以便更轻松地为divide and conquer algorithms 应用并行计算。

    【讨论】:

    • 可能还值得一提的是,即使一位程序员在使用原始(低级)线程 API 编写多线程代码方面非常出色,随后的代码维护人员也很可能会在其中引入细微的错误当需要更改时,现有的多线程代码。拥有更好的抽象(如 fork/join(和其他))有助于确保多线程代码第一次正确编写,然后在其他人需要在未来几年维护它时保持正确。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多