Java中有没有良好的实现continuations(续延)?
如果有的话,它的开销如何?JVM并不是为这种情况而设计的,对吧?那么这是否与常规相违背?
Java中有没有良好的实现continuations(续延)?
如果有的话,它的开销如何?JVM并不是为这种情况而设计的,对吧?那么这是否与常规相违背?
请查看Apache Javaflow http://commons.apache.org/sandbox/javaflow/
这是目前唯一仍在积极开发的Java Continuation包。另外一个名为RIFE的包,我不确定其状态如何。
RIFE http://www.artima.com/lejava/articles/continuations.html WebWork使用。
JauVM http://jauvm.blogspot.com/2005/07/so-what-does-it-do.html JVM中的JVM,实现尾递归/continuation
Scala 2.8 http://www.scala-lang.org/node/2096
Cocoon http://cocoon.apache.org/2.1/userdocs/flow/continuations.html http://wiki.apache.org/cocoon/RhinoWithContinuations
Jetty http://docs.codehaus.org/display/JETTY/Continuations 重试请求。
协程 http://code.google.com/p/coroutines
jconts https://github.com/idubrov/jconts
jyield http://code.google.com/p/jyield
Kilimhttp://www.malhar.net/sriram/kilim/thread_of_ones_own.pdf 是一份关于Kilim框架的技术文献,该框架是基于Java虚拟机的,用于编写高效且可靠的并发应用程序。
是一篇针对ATCT算法的论文,该算法可以在保证正确性的同时,加速计算过程。CompletableFuture<T>
类,支持继续和更多的函数/反应式编程方法。downloadAndResize
方法:public CompletableFuture<Image> downloadAndResize(String imageUrl, int width, int height) {
return CompletableFuture
.supplyAsync(() -> downloadImage(imageUrl))
.thenApplyAsync(x -> resizeImage(x, width, height));
}
private Image downloadImage(String url){
// TODO Download the image from the given url...
}
private Image resizeImage(Image source, int width, int height){
// TODO Resize the image to w / h
}
CompletableFuture<Image> imagePromise = downloadAndResize("http://some/url", 300, 200);
imagePromise.thenAccept(image -> {
// Gets executed when the image task has successfully completed
// do something with the image
});
CompletableFuture
只是其中一种很好的封装和使用方式。 - Vadzim如果您不介意隐式连续性,Kilim是一个很好的选择。它通过处理注释方法并为您生成字节码中的连续来工作。显然,它做了更多的事情,因为它是一个框架,但如果您想要线程安全连续的(出色)性能,它值得一看。
最近出现了另一个强有力的竞争对手。
Quasar 使用 Matthias Mann 的 Java continuations 实现的分支,提供了更高级别的功能,如 轻量级线程、类似 Erlang 的 actors 和类似 Go 的协程和 通道。
Quasar 博客 中有许多基准测试和详细介绍。
还有一个名为 Comsat 的即用型集成,旨在帮助轻松构建基于 continuations 机制的高性能 Web 服务。
Quasar还提供了一个漂亮的Kotlin API,最近在JetBrains的网络研讨会上得到了推荐。Quasar: Efficient and Elegant Fibers, Channels and Actors。所有提到的内容都是开源且免费使用的。另请参见http://blog.paralleluniverse.co/2015/08/07/scoped-continuations/。更新
Quasar的经验后来被用作Loom项目的基础,该项目旨在在Java 11之后的某个时候直接将continuations支持引入JVM。