第一章同時紹介

1737 ワード

一、コンピュータにオペレーティングシステムを加えて複数のプログラムを同時に実行するのは、主に以下の原因に基づいている.
1、資源利用率:複数のプログラムを同時に実行できる.
2、公平性:資源の共有と同等の使用権.
3、利便性:複数のタスクを計算する場合、複数のプログラムを作成し、各プログラムが1つのタスクを実行し、必要に応じて通信する.このプログラムは1つのプログラムだけを作成して、すべてのタスクを計算するのが容易である.
二、スレッドによるリスク
1、セキュリティの問題:スレッドセキュリティは非常に複雑である可能性があり、十分な同期がない場合、複数のスレッドにおける操作実行順序は予測不可能であり、奇妙な結果を生じることもある.
例:
@NotTheadSafe
public class UnsafeSequence{

    private int value;

    public int getNext(){

       return value++;      

    }

}

複数のスレッドがgetNext()を同時に実行する場合.では、同じ結果を返す可能性があります.
スレッドセキュリティに変更すると、次のようになります.
@TheadSafe
public class Sequence{
  //   
  @GuardedBy("this")
  private int value;

  public synchronized int getNext(){

     return value++;
   
  }

}

2、活発性の問題
セキュリティの意味は「悪いことは永遠に起こらない」ということであり、アクティビティは「正しいことはいつも起こる」というもう一つの目標に注目しています.操作が続行できない場合、アクティブな問題が発生します.
例:スレッドAがスレッドBを待ってリソースを解放し、スレッドBがリソースを解放しない場合、Aは永遠に待機します.
3、性能問題
パフォーマンスの問題には、サービス時間が長すぎる、対応する感度が低い、スループットが低すぎる、リソース消費が高すぎる、または伸縮性が低いなどの複数の態様が含まれます.
設計されたコンカレントアプリケーションでは、スレッドはプログラムのパフォーマンスを向上させることができますが、いずれにしても、スレッドはある程度のランタイムオーバーヘッドをもたらします.マルチスレッドプログラムでは、スレッドスケジューラが一時的にアクティブな県城を停止して別のスレッドを実行すると、頻繁にコンテキストの切り替え操作が発生します.この操作は、実行コンテキストの保存と返信、局所性の喪失、およびCPU時間がプログラムの実行ではなくスレッドのスケジューリングにより多くの通話料を発生させます.県城がデータ室を共有する場合、同期メカニズムを使用する必要がありますが、これらのメカニズムは常にいくつかのコンパイラが最適化され、メモリキャッシュ領域のデータが無効であり、共有メモリバスの同期トラフィックを1段階増加させることがよくあります.これらの要因はすべて、追加のパフォーマンスオーバーヘッドをもたらします.