ホームページ >Java >&#&チュートリアル >Java マルチスレッドの利点
課題にもかかわらずマルチスレッドが依然として使用されている理由は、マルチスレッドには依然としていくつかの利点があるためです。その利点の一部は次のとおりです。
リソース使用率の向上
一部のシナリオではシンプル プログラム設計
プログラムの高速化と応答性の向上
リソース使用率の向上
アプリケーションがローカル ファイル システムからファイルを読み取り、処理していると想像してください。ディスクからファイルを読み取るのに 5 秒かかり、その処理に 2 秒かかり、両方のファイルの実行には次の時間がかかるとします。
5 seconds reading file A 2 seconds processing file A 5 seconds reading file B 2 seconds processing file B ----------------------- 14 seconds total
ディスクからファイルを読み取るとき、CPU 時間のほとんどはファイルが読み取られるのを待つのに費やされます。このとき、CPU はかなりアイドル状態になります。他のこともできます。この操作の順序を変更することで、CPU をより有効に活用できます。このシーケンスを見てください:
5 seconds reading file A 5 seconds reading file B + 2 seconds processing file A 2 seconds processing file B ----------------------- 12 seconds total
CPU は最初のファイルが読み取られるのを待ちます。次に、2 番目のファイルの読み取りを開始します。 2 番目のファイルが読み取られている間に、この CPU は最初のファイルを実行します。この CPU は、ディスクからファイルが読み取られるのを待機している間、ほとんどの時間アイドル状態であることに注意してください。
通常、CPU は IO を待っている間に他のことを行うことができます。必ずしもディスク IO である必要はありません。ネットワーク IO やユーザーからの入力の可能性もあります。ネットワークおよびディスク IO は、CPU およびメモリ IO よりもはるかに遅くなります。
よりシンプルなプログラミング
シングルスレッド アプリケーションでファイルの読み取りと処理の上記のシーケンスを手動で作成する場合は、読み取りと処理中の各ファイルのステータスを追跡する必要があります。代わりに、2 つのスレッドを開始して、それぞれが別のファイルを単純に読み取り、処理することができます。これらの各スレッドは、ディスクがファイルを読み取るのを待機している間ブロックされます。待機中に、他のスレッドは CPU を使用して、すでに読み取ったファイルの一部を処理できます。その結果、ディスクはさまざまなファイルをメモリに読み込んで常に忙しい状態になります。その結果、ディスクと CPU の使用率が向上します。また、スレッドは単一のファイルのみを追跡するため、プログラムも簡単になります。
より応答性の高いアプリケーション
もう 1 つの共通の目標は、シングルスレッド アプリケーションをマルチスレッド アプリケーションに変換することで、アプリケーションの応答性が向上することです。受信リクエストをいくつかのポートでリッスンしているサーバー アプリケーションを想像してください。リクエストを受信すると、リクエストを処理し、リッスンに戻ります。このサーバー ループの概要を以下に示します:
while(server is active){ listen for request process request }
このリクエストの処理に時間がかかる場合、その間、新しいクライアントはリクエストをサーバーに送信しません。サーバーのみが受信リクエストをリッスンできます。
別の設計では、リッスンしているスレッドがワーカー スレッドにリクエストを渡し、すぐに監視に戻ります。このワーカー スレッドはリクエストを実行し、クライアントにレスポンスを送信します。設計の概要を以下に示します
while(server is active){ listen for request hand request to worker thread }
このようにして、サーバー スレッドはすぐにリスナーに戻ります。そのため、より多くのクライアントがサーバーにリクエストを送信できるようになります。サーバーの応答性が向上しました。
デスクトップアプリケーションにも同じことが当てはまります。ボタンをクリックして長時間実行タスクを開始し、そのタスクを実行しているスレッドがウィンドウやボタンなどを更新しているスレッドである場合、タスクが実行されるとアプリケーションは応答しなくなります。代わりに、このタスクをワーカー スレッドに変換できます。ワーカー スレッドがタスクの処理でビジーである間、ウィンドウ スレッドは他のユーザーのリクエストに自由に応答できます。ワーカー スレッドが完了すると、ウィンドウ スレッドに信号を送ります。ウィンドウ スレッドは、このタスクの結果に基づいてアプリケーション ウィンドウを更新できます。ワーカー スレッドを使用して設計されたプログラムは、ユーザーに迅速な応答を提供します。
上記は Java マルチスレッドの利点の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。