Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

セッションとスレッド数について

javaのスレッドについて教えてください。

セッションを保持するWebアプリケーションの場合、1つのセッションが
1つのスレッドを占有すると認識していたのですが正しいでしょうか?

例えば、Webサーバ側の設定でスレッド数のMAXを50と設定してある場合、
同時接続は50人までとなり、51人目の人は誰かのセッションが切れるまで
待ち状態になる(接続ができない)と認識していましたが正しいでしょうか?

今作っているWebアプリケーションで、複数のブラウザ(マシン)から
サイトに同時に接続してテストを行っているのですが、アイドルスレッド
数が接続しているブラウザの数だけ減りません。

すると、Webアプリ側に問題がある可能性も考えられますか?
もしくは私のスレッドとセッションに関する認識が間違っていますか?


よろしくお願いいたします。

4

回答

9052

閲覧

4件の回答

評価

0

認識が間違っている。

スレッドとセッションに直接の関係はない。
セッションは複数のリクエストについて情報を共有するための仕組みだが、各リクエストが同一のスレッドである必要はない。

スレッドはJava引いてはOSの機能であるが、セッションはTomcatの仕組みに過ぎない。
セッションがどのような仕組みかを理解すると良いだろう。

評価

0

ご回答、ありがとうございます。
根本的なことを勘違いしていたようです。

すると、セッションを保持する場合としない場合とで、スレッド側の動作の違いはないということになるのでしょうか?
セッションを保持しない場合は、クライアントからのリクエストを受け取ってレスポンスを返して、スレッドの仕事は終了、
この動きを繰り返すことになるかと思います。
セッションを保持する場合も、同様となるという事でしょうか?

セッションを保持する場合は、リクエストを受け取った際にセッションIDが含まれていた場合は、サーブレットコンテナから
セッション情報を取得して、レスポンスを返して、スレッドの仕事は終了(コンテナに再度セッション情報を格納する)、
という認識で良いのでしょうか?
(セッション情報はスレッドで管理されているわけではないので、同一のスレッドである必要はない、という事で良いですか?)

評価

0

>セッションを保持する場合としない場合とで、スレッド側の動作の違いはない
そうそう。
getSession()を発行しなければコンテナとのやりとりもないし、基本的には何も変わらないということになる。

だから、最大スレッド数は何クライアントが「同時にリクエストするか」の想定であって、「ページを開きっぱなしにするか」ではない。

>レスポンスを返して、スレッドの仕事は終了、
別スレッドを起こす処理がないなら、基本はそういうこと。

評価

0

勉強になりました。
根本的なことを勘違いしていたようで…

ありがとうございました m(__)m

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。