3

これが私のユースケースです。

  1. クライアントはサーバーにリクエストを送信します。
  2. サーバーは次の2.aを実行する必要があります。ネットワーク呼び出しを行ってデータを取得します(D)。
    2.b. データを処理するプロセッサ(P)を作成します。
  3. PはDを処理し、応答をクライアントに送り返します

プロセッサの作成にはコストがかかります(約1〜3秒)。ただし、データDには依存しません。

私の計画は、2つの異なるスレッドを使用して、ネットワーク呼び出しとプロセッサの作成を並行して実行することです。

アプリサーバー内でマルチスレッドプログラミングを行ったことがありません。私の質問は、アプリサーバー(特にTomcatとJetty)内のスレッドを処理するための最良の方法は何ですか?

ありがとう。

4

3 に答える 3

5

IMO の最善の策は、Executorフレームワークを使用することです。これにより、同時実行の処理がはるかに簡単になります。

ここでは、開始するためのチュートリアルをいくつか 紹介します。

コードが Tomcat などの Web コンテナー内で実行されているという事実は、それほど気にする必要はありません。これは、リクエストを処理する実際のスレッドが実際にはワーカー スレッドであり、アプリケーション サーバー自体が管理するスレッド プールから取得されることを意味します。ただし、独自のスレッドが適切にジョブを実行し (つまり、この実際の要求に限定されたデータのみを変更し、他の外部スレッドに干渉しない)、同時にそれらのスレッドが多すぎない限り、すべてが適切に処理されます。大丈夫です。

于 2012-05-09T15:59:39.460 に答える
4

Tomcat 7 は Servlet 3.0 をサポートし、これは非同期サーブレットです。独自のスレッド プールを維持し、個別のスレッドでリクエストを実行するための標準 API を提供します。ここで例を見ることができます: Tomcat 7 の非同期サーブレット

于 2012-05-09T16:02:57.607 に答える
0

プロセッサ (P) の作成にコストがかかる場合、P インスタンスのプールを事前に作成し、データベース接続プールを作成するのと同じ方法で再利用できますか?

Apache Commons Pool プロジェクトが出発点になります。

于 2012-05-10T08:33:03.143 に答える