2017-03-19 2 views
1

私はJerseyベースのWebサービスに新しいエンドポイントを追加しています。エンドポイントを支えるロジックは、別のサービスへの10から50コールを行う必要があります。呼び出しは独立していて並列化できるため、executorサービスを使用して複数のスレッドに作業を分散させることを考えていました。要求内にexecutorServiceを作成するか、webapp全体で1つのインスタンスを共有する必要がありますか?

リクエストごとにexecutorServiceをインスタンス化する必要があるのか​​、またはwebapp全体で共有されているexecutorServiceインスタンスが存在するかどうかは疑問です。後のケースでは、実行すべきスレッドの数をどのように決定するのですか?私は、各 要求に対してExecutorServiceのをインスタンス化するか、 Webアプリケーション間で共有ExecutorServiceのインスタンスが存在するかどう

答えて

2

私は疑問に思って。後者の場合、実行するスレッドの数はどのように決定するのですか?

一般に番号(時間のかかるサーバーはすぐにメモリ不足になり、また、その場でスレッドプールの作成が高価であるので、あなたは、各Webリクエスト(オプション-1)のためexecutorServiceをインスタンス化しないでください)。

executorServiceの共有インスタンス(オプション2)は、サーバーの起動時に作成することで、必要に応じてスレッドプールサイズを構成し、パフォーマンステストを実行することで行う必要があります。

hereを参照すると、スレッドプールについて理解できます。

+0

オプション2を実装する最良の方法は何ですか? ExecutorServiceを共有して、静的なフィールドのようなコントローラ(例)でコントローラを作成しますか?それともExecutionServiceを共有する方が良いと思いますか? – Rahnzo

関連する問題