30

Javaで継続の適切な実装はありますか?

もしそうなら、オーバーヘッドはどのようなものですか?JVMは、このようなことを念頭に置いて設計されていませんでしたね。それで、この種の穀物に反対するのですか?

4

11 に答える 11

13

Apache Javaflow http://commons.apache.org/sandbox/javaflow/を参照してください。

これは、活発に開発中の Java の唯一の継続パッケージです。もう 1 つの RIFE は、どの状態かわかりません。

于 2010-09-07T02:19:55.133 に答える
7

Jetty継続サポートを提供しています。DZoneでさらに議論といくつかのサンプルがあります。

モートベイチームは常にそのような問題を意識しているように見えると言う以外に、効率性などについてアドバイスすることはできません。ほとんどの場合、Jettyサイトのどこかで実装のトレードオフについての議論があります。

于 2009-09-21T18:39:07.960 に答える
3

Java 8以降、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

});
于 2015-05-09T09:19:38.017 に答える
2

暗黙の継続を気にしないのであれば、Kilimは素晴らしいオプションです。注釈付きメソッドを処理し、バイトコードで継続を生成することで機能します。フレームワークであるため、明らかに多くのことを実行しますが、スレッドセーフな継続の(優れた)パフォーマンスが必要な場合は、一見の価値があります。

于 2012-08-13T18:08:06.240 に答える
2

私がこれを正しく理解していれば、明らかな問題は、クロージャ インスタンスがアクティブな状態でスタックを巻き戻すことに関係していると思います。レキシカル スコープを持つ言語は、理論的には、子フレームがクロージャ インスタンスを作成し、参照される中間フレームを識別し、それらのフレームを単にスタックにプッシュするのではなく、malloc できることを理解できると思います。

さらに言えば、コンパイラは、グローバルにバインドされていないオブジェクトを参照するクロージャのすべてのフレームまたはすべての親フレームを malloc する可能性があります。

概要

JVM が実際のマシン以上にクロージャーを制限しているとは思いません。単に一般的なスタック パラダイムと戦っているため、通常はパントされます。

于 2009-09-21T18:48:48.017 に答える
1

遊ぶ!フレームワーク バージョン 1.2.x は、非同期 http グッズと統合された継続もサポートしています。

Play 1.2.x の継続は、組み込みの Netty サーバーでのみ機能することに注意してください。

また、Play 2.x はまだ継続をサポートしていません

于 2012-10-19T15:34:37.153 に答える
0

Scalaは JVM でも動作します。だから関係あるかも。

Scala 継続とは何ですか? なぜそれを使用するのですか?

さらに、Scala には多少似た async/await 機能があります。

http://docs.scala-lang.org/sips/pending/async.html

于 2013-12-04T06:43:00.247 に答える