Java マルチスレッドの利点

黄舟
リリース: 2017-02-28 10:10:39
オリジナル
1527 人が閲覧しました

課題にもかかわらずマルチスレッドが依然として使用されている理由は、マルチスレッドには依然としていくつかの利点があるためです。その利点の一部は次のとおりです。


  • リソース使用率の向上

  • 一部のシナリオではシンプル プログラム設計

  • プログラムの高速化と応答性の向上

リソース使用率の向上

アプリケーションがローカル ファイル システムからファイルを読み取り、処理していると想像してください。ディスクからファイルを読み取るのに 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) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!