Java 8 CompletableFuture 与 Netty 未来
Posted
技术标签:
【中文标题】Java 8 CompletableFuture 与 Netty 未来【英文标题】:Java 8 CompletableFuture vs Netty Future 【发布时间】: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
我试图得到答案的问题是:
-
它们的相同点和不同点是什么?
两者的性能特征有何不同?哪一个能够更好地扩展?
关于相同点/不同点,我已经能够提出以下几点:
相似之处: 基本的相似之处在于与 Java Future 相比,两者都是非阻塞的。这两个类都有可用于向未来添加侦听器、内省任务的失败和成功并从任务中获取结果的方法。
区别:
CompletableFuture
似乎有一个更丰富的接口,用于编写多个异步活动等。另一方面,Netty 的 io.netty.util.concurrent.Future
允许将多个侦听器添加到同一个 Future,此外还允许删除侦听器。
【问题讨论】:
您可以多次调用CompletableFuture.thenDoSomething()
方法,类似于在其他未来框架中添加多个监听器。
CompletableFuture 有类似 Netty Future 的事件循环吗?
@user1870400 CompletableFuture
(以及任何其他实现 CompletionStage
的类)具有像 thenApply
和 thenApplyAsync
这样的方法,它们以不同的方式工作。像thenApply
这样的方法将立即在同一个线程上执行,而thenApplyAsync
将使用Executor
执行,这可以通过事件循环来实现(尽管默认是工作窃取池)。
这里有一些关于该主题的讨论:github.com/netty/netty/issues/2105
【参考方案1】:
如果我们看整个段落(尤其是第一句话)
Java 有时会通过采用包含结构的思想来取得进步 由 Netty 提供。例如,JDK 8 添加了 CompletableFuture 有些重叠 io.netty.util.concurrent.Future。在这种情况下, Netty 的构造为您提供了一个很好的迁移路径;我们将 考虑到未来的迁移,努力更新 API。
它的基本意思是,netty Future
和 CompletableFuture
是同一个概念,但在不同的时间由不同的人实现。
Netty 创造了他们的未来,因为在 java 中没有一个可用的,而且他们不想将一个作为 Guice 之类的依赖项引入。但是现在java已经创建了一个,并且可以使用了。
在段落的末尾,他们基本上是在说 netty API 将来可能会用 CompletableFuture
替换 Future
。
就相似之处/不同之处而言,它们都只是future/promise 模式的众多实现之一。当你使用 netty api 和 netty 特定的东西时使用 netty one,否则使用CompletableFuture
。
【讨论】:
以上是关于Java 8 CompletableFuture 与 Netty 未来的主要内容,如果未能解决你的问题,请参考以下文章
Java 8 CompletableFuture 与 Netty 未来
Java 8 的异步编程利器 CompletableFuture 详解
Java 8 的异步编程利器 CompletableFuture 详解