【问题标题】:Equivalent of Task Parallel Library in JavaJava中任务并行库的等价物
【发布时间】:2011-05-06 06:41:01
【问题描述】:

我猜在 Java 中没有与任务并行库(.NET 4.0 的)等效的东西。真的吗? .NET 的这一特性提供了哪些 Java 并发没有的改进。

【问题讨论】:

    标签: c# java concurrency task-parallel-library


    【解决方案1】:

    Java 有java.util.concurrent 包,还有fork/join framework。 Fork/join 在 Java 7 中是 scheduled for inclusion,但可以是 downloaded now 并与 Java 6 一起使用。

    Brian Goetz 等人撰写的《Java Concurrency in Practice》是一本了解 Java 并发的好书。

    【讨论】:

    • fork/join 框架和任务并行库有关系吗?
    • 我不是 .NET 开发人员,但从我读到的有关 TPL 的信息(例如,msdn.microsoft.com/en-us/library/dd460717.aspx)来看,fork/join 似乎与 TPL 有很多共同点。例如,“TPL 动态扩展并发程度,以最有效地使用所有可用的处理器。”相比之下,这来自 fork/join 文档:“fork/join 处理的候选对象主要包括那些可以使用并行分而治之技术表达的对象:...将其分成两个(或更多)部分,然后并行解决这些部分”
    • 通过链接获得的示例章节非常好。这让我很想买这本书,但它最后一次出版是在 2006 年,所以我不确定它的最新情况。
    • 这个答案是正确的。如果您对使用 Promise 和 Futures 的组合感兴趣(即这个然后那个),我会补充一点来看看 JDeferred 或 Bolts 框架。
    • 2019 年(几天后)会更新一本好书吗?谢谢。
    【解决方案2】:

    Habanero-Java library (HJ-lib) 是 Habanero-Java (HJ) 的新库实现,Rice University 正在开发一种教学并行编程模型。 HJ-lib 能够表达多种不同形式的并行模式,包括数据并行、管道并行、流并行、循环并行和分治并行。

    HJ-lib 将广泛的并行编程结构(例如,异步任务、期货、数据驱动任务、forall、障碍、移相器、事务、参与者)集成在一个单一的编程模型中,可以实现这些结构的独特组合(例如,任务和参与者并行性的嵌套组合)。

    HJ-lib 是使用 lambda expressions 构建的,可以在任何 Java 8 JVM 上运行。较旧的 JVM 可以通过依赖外部字节码转换工具来实现兼容性。 HJ 运行时负责编排 HJ 任务的创建、执行和终止,并具有工作共享和工作窃取调度程序。

    HJ-lib 对于教育工作者来说也是一个有吸引力的工具,它提供了大量的教育资源,可从莱斯大学提供的二年级COMP 322 course 获得。这些资源也可用于了解库 API。 API 的 Javadoc 是 also available

    这是一个简单的 HelloWorld 版本:

    import static edu.rice.hj.Module1.*;
    
    public class HelloWorld {
    
        public static void main(final String[] args) {
    
            launchHabaneroApp(() -> {
    
                finish(() -> {
                    async(() -> System.out.println("Hello"));
                    async(() -> System.out.println("World"));
                    async(() -> System.out.println("in"));
                    async(() -> System.out.println("HJ-lib"));
                });
    
            });
        }
    }
    

    COMP 322 course website 提供了各种并行结构的更多示例。

    【讨论】:

      【解决方案3】:

      据我所知,Java 中没有等价物。

      我写了一个受 TPL 启发的 Java 任务库。它不支持 TPL 的所有功能,但符合我当时的要求。

      Github:https://github.com/BrunoMNDantas/TPL4J

      Maven:https://mvnrepository.com/artifact/com.github.brunomndantas/tpl4j

      【讨论】:

        【解决方案4】:

        是的。 Java 没有等效的任务并行库 - TPL(.NET 4.0)。你的问题是对的(主要词 - NET 4.0)。 TPL 是“共享的” - ANY .NET 应用程序的通用统一 .NET 库。这意味着您可以使用真正异步(非阻塞 UI)方法为任何 .NET 应用程序(WPF、WinForms、Xamarin.Forms、ASP.NET...)提供单一共享异步逻辑。 Java没有。 JavaFX 有特殊的非阻塞任务类,Swing - 后台工作者,Android - 自己的方法。 ...因此命名为 util.concurrency Java 包没有任何不可冻结的 UI(JavaFX、Swing)解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-03
          • 1970-01-01
          • 2016-07-16
          • 2011-10-06
          • 2010-09-08
          • 2012-05-09
          • 2023-03-04
          • 1970-01-01
          相关资源
          最近更新 更多