実際の例についていえば、マルチスレッドを使用するには、いくつかの理由が、そこにあると私それについて知らないウェブ開発者を雇うことはありません。しかし、結局、マルチスレッドを使用する理由は標準開発とWeb開発で同じです。つまり、バックグラウンドでしばらく時間がかかります(ブロックとも呼ばれます)。いくつかのコアで動作させることによってスピードアップできるタスクがあります。実際にマルチスレッドが有用な場合は、別の質問です。
状況1:アイドル状態のコアを利用し、スレッドされているよういくつかの処理を必要とし、低ヒットを持つWebサーバ/秒
ここで(アルゴリズムに該当する場合)マルチスレッドは、良いことですユーザへのより迅速な応答をもたらすことができる。
状況2:いくつかの処理を必要とし、高いヒットを持つWebサーバ/秒
ここではマルチスレッドは可能ですが、コアが、通常は他の要求と忙しいように残されたリソースはありません適切に使用してください。実際の作業は現在、断片化され、すべての部分が完了する必要がありますが、スレッドと実行の順序が定義されていないようにも、応答時間に悪影響を与える可能性がありますいくつかのスレッドにタスクを分散。したがって、あるクライアントはすぐに応答を受け取ることができますが、他のクライアントは最後のフラグメントが最終的に処理されるまでタイムアウトになることがあります。
状況3: Webサーバーが
ここでマルチスレッドが必要とされる非常に長い時間がかかり、いくつかの処理を行う必要があり、その周りに方法はありません。クライアントは応答を受信するまで数分または数時間待つことができません。この場合、通常はコールバックシステムが実装されているため、基本的に各タスクには現在の状態を照会できる「API」があります。ほとんどのオンラインショップはこれの一例です。何かを注文した後、注文ステータスを照会することができます。
スレッドの代わりにプロセスフォークがあります。これは、Apacheが標準的な構成で行うように行われます。利点は、その負荷は(状況2に主に適用される)のコアに分散しているされており、ウェブ・コード自体が自動的にOSハンドルとして、これらすべてのコアを使用するように何もする必要はありません。しかし、不均衡な負荷があると、一部のコアがアイドル状態になることがあり、リソースが最適な方法で使用されません。スレッディングの状況は、正しく実行された場合、ほとんどの場合、より良い解決策になります。しかし、Apache/Tomcatの標準設定では、リクエストごとに1つのスレッドを生成することによって、非常に時代遅れのスレッドモデルを使用しています。効果的に一定量のヒット/秒が与えられた場合、CPUは実際にそれらの要求を処理するよりスレッド化に忙しいです。
IMHO、あなたは、Webアプリケーションでのマルチスレッドの主な役割は、複数の独立した要求を同時に処理して、サーバを応答させることです。 – Ingo
例として、ユーザー登録ページがあり、そのユーザーに登録に関する電子メール通知を送信する必要があります。この場合、別のスレッドで電子メールを送信してマルチスレッドを使用できます。 – Foolish
xmlを解析するためにマルチスレッドを使用しています –