4

簡単なシナリオは次のとおりです。

ユーザーは、Web アプリケーションの Web ページから何らかの操作をトリガーします。この操作は負荷が高く、さらに時間がかかります。

そして、サーバー側で操作が完了する前に、ユーザートリガーは、いくつかの異なるパラメーターを使用して同じ操作を行います。したがって、2 番目の要求に対する 2 番目の操作も処理を開始します。

この場合、最初のリクエストを処理する最初のスレッドと2番目のリクエストを処理する他のスレッドのように、2つの異なるスレッドがありますか? または、リクエストの両方を処理する1つのスレッドであり、最初の操作は2番目のリクエストの実行のために中断されます(未完了のままになります)?

ここでは、ユーザーが同じ操作を複数回要求することを避けたくありません。それがどのように機能するか知りたいだけです。

これはばかげた質問かもしれませんが、私はこれに少し混乱しています。そして、私に起こっていることが混乱を助長しています。私にとっては、最初のリクエストの操作が完了していないようです。

それが役立つなら、それはWebsphereアプリケーションサーバーです。

4

2 に答える 2

3

WebSphere Web Container は、すべての要求に対してスレッド プールを使用します。

すべての要求に対して (作成者は関係ありません)、スレッドがプールから取得され、要求が処理され、スレッドがプールに戻ります。

リクエストが次々に発生したとしても、同じスレッドがそれらを処理するという保証はありません。

あるリクエストが別のリクエストに干渉している場合は、WebSphere の動作が原因ではなく、コード内で何かを行っている可能性があります。

于 2013-01-21T16:22:24.483 に答える
3

いいえ。各リクエストは他のリクエストとは独立しています。Websphere にはスレッド アフィニティはありません。自分自身を教える良い方法の 1 つは、websphere ログをチェックアウトすることです。WebSphere が SystemOut.log などのログ ファイルにレコードを書き込むと、ログにはスレッド ID が含まれます。以下は、WebSphere ログ ファイルのレコードの例です。

[12/11/08 13:06:36:830 CST] 0000002e VirtualHost I .....

2 番目のフィールドはスレッド ID で、「0000002e」です。このようにして、2 つの要求が 2 つの異なるスレッドによってどのように処理されているかを関連付けることができます。それがあなたにとって意味があることを願っています。

于 2013-01-22T07:21:56.970 に答える