2017-09-15 5 views
0

サーブレット3.0では、非同期操作であるタスクを作成して、リクエストを処理するスレッドをコンテナに戻すことができます。コンテナは、別のリクエストを処理するために使用できます。スレッドプールを使用して非同期要求に使用できるスレッドの数を設定している場合、どのようにチューニングする必要がありますか/考慮する必要があるパラメータは何ですか?スレッドプールのコンフィグレーションを非同期スレッドでチューニング/分析する方法は?

それはForkJoinプールからスレッドをつかむと、このように処理を行うために春を告げることも可能です:我々が管理するスレッドプールのアプローチを取っ対これを行う必要がある場合は

logger.info("Request received"); 
    DeferredResult<String> deferredResult = new DeferredResult<>(); 
    CompletableFuture.supplyAsync(taskService::execute) 
     .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result)); 
    logger.info("Servlet thread released"); 

:(Taken from this tutorialCallable?唯一の違いは、Java 8s commonPoolを設定し、Spring Bootが上記のタイプのCompleteableFuture処理を行うためのスレッドを取得し、もう1つはSpringのExecutorServiceの型です。アプローチに違いはありません。

答えて

1

最初の部分については、第8章「Java Concurrency In Practice」のスレッドプールの適用を参照することをお勧めします。

2番目の部分では、Springは、提供されたスレッドプールを使用して呼び出し可能なタスクを独自に実行しますが、DeferredResultはアプリケーションによって処理される必要があります。より多くの制御が提供されます。たとえば、アプリケーションは、特定の計算を別のスレッドで実行するかどうか、またはいくつかのメタデータに基づいて実行するかどうかを実行時に決定できます。 DeferredResultは、コールバックもサポートしています。

関連する問題