【问题标题】:Java 8 CompletableFuture vs Netty FutureJava 8 CompletableFuture 与 Netty 未来
【发布时间】:2016-03-11 15:35:17
【问题描述】:

JDK 8中引入的CompletableFuture与Netty提供的io.netty.util.concurrent.Future相比如何?

Netty 文档提到

JDK 8 添加了有些重叠的 CompletableFuture io.netty.util.concurrent.Future http://netty.io/wiki/using-as-a-generic-library.html

我试图得到答案的问题是:

  1. 它们的相同点和不同点是什么?
  2. 两者的性能特征有何不同?哪一个能够更好地扩展?

关于相同点/不同点,我已经能够提出以下几点:

相似之处: 基本的相似之处在于与 Java Future 相比,两者都是非阻塞的。这两个类都有可用于向未来添加侦听器、内省任务的失败和成功并从任务中获取结果的方法。

区别: CompletableFuture 似乎有一个更丰富的接口,用于编写多个异步活动等。另一方面,Netty 的 io.netty.util.concurrent.Future 允许将多个侦听器添加到同一个 Future,此外还允许删除侦听器。

【问题讨论】:

  • 您可以多次调用CompletableFuture.thenDoSomething()方法,类似于在其他未来框架中添加多个监听器。
  • CompletableFuture 有类似 Netty Future 的事件循环吗?
  • @user1870400 CompletableFuture(以及任何其他实现 CompletionStage 的类)具有像 thenApplythenApplyAsync 这样的方法,它们以不同的方式工作。像thenApply 这样的方法将立即在同一个线程上执行,而thenApplyAsync 将使用Executor 执行,这可以通过事件循环来实现(尽管默认是工作窃取池)。
  • 这里有一些关于该主题的讨论:github.com/netty/netty/issues/2105

标签: java java-8 netty nonblocking completable-future


【解决方案1】:

如果我们看整个段落(尤其是第一句话)

Java 有时会通过采用包含结构的思想来取得进步 由 Netty 提供。例如,JDK 8 添加了 CompletableFuture 有些重叠 io.netty.util.concurrent.Future。在这种情况下, Netty 的构造为您提供了一个很好的迁移路径;我们将 考虑到未来的迁移,努力更新 API。

它的基本意思是,netty FutureCompletableFuture 是同一个概念,但在不同的时间由不同的人实现。
Netty 创造了他们的未来,因为在 java 中没有一个可用的,而且他们不想将一个作为 Guice 之类的依赖项引入。但是现在java已经创建了一个,并且可以使用了。
在段落的末尾,他们基本上是在说 netty API 将来可能会用 CompletableFuture 替换 Future
就相似之处/不同之处而言,它们都只是future/promise 模式的众多实现之一。当你使用 netty api 和 netty 特定的东西时使用 netty one,否则使用CompletableFuture

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多