私は Java の初心者であり、私の経験は Web コンテナー (私の場合は Jboss) で実行される Web ベースのアプリケーションに限られています。
Web アプリケーションの場合、Web コンテナがマルチスレッドを処理するというのは正しいですか? その場合、Web ベースのアプリケーションに新しいトレッドを導入できますか? そうすることに利点はありますか? また、どのようなシナリオでそれを行う必要がありますか?
ありがとう
私は Java の初心者であり、私の経験は Web コンテナー (私の場合は Jboss) で実行される Web ベースのアプリケーションに限られています。
Web アプリケーションの場合、Web コンテナがマルチスレッドを処理するというのは正しいですか? その場合、Web ベースのアプリケーションに新しいトレッドを導入できますか? そうすることに利点はありますか? また、どのようなシナリオでそれを行う必要がありますか?
ありがとう
コンテナは「マルチスレッド サーブレット モデル」を実装しているため、ほとんどの Web コンテナはアプリケーションをマルチスレッドで実行します。したがって、アプリケーション (サーブレットのコード) はすでに複数のスレッドで実行されているため、スレッドセーフである必要があります (サーブレット クラスのインスタンス フィールドなどの共有データにアクセスするときは、適切な同期を使用する必要があります)。
Web アプリケーション内から新しいスレッドを起動することは完全に合法です。たとえば、実行時間の長いタスク (メール送信で終了するデータベースへのユーザーの登録、またはPI
小数点以下第 100000 位までの計算) を起動し、その直後にユーザーの HTTP 要求を閉じて、ユーザーのブラウザーの読み込みを終了させる必要がある場合があります。 URL。
Web アプリケーション サーバーは、リクエストごとに新しいスレッドを作成する傾向があります。そのため、2 人のユーザーがフォームに入力して同時に送信した場合でも、両方の要求が別々のスレッドを使用してサーバーに送信されるので安心できます。特定のページに同時にアクセスするユーザーの数によって、ページが処理できる負荷が実際に決まります。
新しいスレッドの作成に関する限り。新しいスレッドを作成する従来の Java メソッドを使用して、アプリケーション内に新しいスレッドを確実に作成できます。
一般に、非同期タスクを実行する必要があり、ユーザーに出力を待たせたくない場合に備えて、新しいスレッドを作成します。ユーザーに関係のないDBへの大きなデータの挿入は、一般にスレッドで記述されるとします。
また、バックグラウンドで長時間実行するタスクを実行する場合、コードは通常スレッド内に記述されます。
場合によっては、ページにアクセスして何かを要求するユーザーもサーバー側のスレッド内にいる必要があるという要件があります。たとえば、プリンターにアクセスしようとしています。その場合、コードがスレッド内に記述され、メソッドが適切に同期されていることも確認する必要があります。
Web アプリケーションの場合、Web コンテナがマルチスレッドを処理するというのは正しいですか?
ほとんどのサーバーは、複数の要求を同時に処理するためにマルチスレッド化されています。
Web ベースのアプリケーションに新しいトレッドを導入できますか?
はい、できます。それはあなたの条件によって決まります。
そうすることに利点はありますか? また、どのようなシナリオでそれを行う必要がありますか?
部分的に非同期に実行できる時間のかかるジョブがある場合は、複数のスレッドを使用します。
たとえば、リクエストでは、巨大なファイルを読み取ってデータベースにダンプする必要があります。このような場合、複数のスレッドを使用して行ごとに読み取り、DB に挿入できます。
私が言ったように、それは依存します。
ほとんどの Web アプリケーション サーバーは、独自のスレッドで着信要求を処理します。つまり、サーバーが 5 つのリクエストを同時に処理する場合、5 つのスレッドを実行していることになります。
これは通常、中規模から大規模のサーバーを十分に機能させるのに十分なマルチスレッドです。
ただし、非典型的なワークロードがある場合 (たとえば、リクエストは少ないが、各リクエストには大量の計算が含まれる)、これに加えて独自のマルチスレッドを導入することは、投資する価値があるかもしれません。