Java開発でマルチスレッドを使用する必要があるとき、およびそれを使用する理由/理由はわかりません。さまざまなシナリオでどのように役立ちますか?
スレッドを使用するようにプログラムを変更するには、いくつかの理由があります。
プログラムが大幅に高速に実行され、実行している複数のCPU /コアアーキテクチャをより有効に利用できるようになると、多くの場合、スレッドを追加すると複雑さが増し、20%の速度向上がそれに値するものではないため、「かなり」という言葉を使用します。
しかし、あなたのプログラムが複数のプロセッサを適切に使用するかどうかを判断して、プログラムの再加工がうまくいくようにすることは困難です。多くの処理/計算が必要な場合にのみ、スピードアップが得られます。たとえば、プログラムがIO(ディスクまたはネットワークの読み取りまたは書き込み)を待っている場合、プログラムを複数のスレッドに分割するだけでスピードの向上が見られない場合があります。
プログラムの複数の部分が同時に実行される必要がある場合。 1つのスレッドで実行できないのではなく、そうすることはより複雑になります。たとえば、Webサーバーには複数の要求処理スレッドがあります。なぜなら、複数のスレッドでより高速に処理できるように、サーバーから負荷をかけていなくても、各スレッドが単一の要求を処理する方が簡単だからです。
また
:J2EEのもののために同じ質問、私は私のサーブレットでマルチスレッドを使用する必要がありますか?それとも私はしないべきですか?
私は上記と同じ回答が当てはまると思います。一般に、サーブレットは非常に小さなタスクであり、すぐに戻るように設計されているため、スレッドをフォークするのは比較的まれです。ただし、サーブレットを起動する必要があるが、「開始ジョブ」タイプの応答を返す必要がある、長時間実行されるタスクがある場合は、スレッドが必要になります。
サーブレットが実行されるときに上流のハンドラは既にスレッドプールを使用している可能性がありますので、何もする必要はありません。
編集:
シナリオ1 - 私は敵と2Dスクロールゲームを作ってるんだし、すべてのことは、私は良いを持っていない
メタルスラッグを考えますこれに答える。多くのレンダリングが行われているかどうかによって異なりますが、使用しているツールキットによって異なります。
シナリオ2 - 複数のデータベースコンテンツをチェックするデータベースデーモンを作成しています。
複数のスレッドがあなたに何かを与えることができないように、あなたはデータベースIOバウンドになる可能性があります。また、長いクエリを実行している場合、短いクエリが他のスレッドで並列に実行される可能性があります。これは、データベースが複数の接続をどのように処理するかによっても異なります。
シナリオ3 - 私はいくつかの情報をデータベースから取得してJSP用のサーブレットを作成しています。
応答が情報を取得するのを待つ必要がある場合、別のスレッドでこれを行う理由はありません。しかし、上記のように、サーブレットがバックグラウンドで実行される何らかのデータベーストランザクションをフォークしようとしている場合は、スレッドを使用する必要があります。
ここでも、ほとんどのサーブレットコンテナはすでにスレッドプール内で実行されています。
あまりにも一般的な質問... – Sebastian
@セバスチャンまあ私は検索しました私はこれを見つけましたが、私は答えに満足していませんでした。だから、私はそれが欲しいという形でやり直しました。これがあまりにも広すぎるなら、この質問もそうです:http://stackoverflow.com/questions/7419619/ –
私はその質問が現在保留から外れるほど具体的であると信じています。 – supersam654