デッドロック、ライブロック、パフォーマンスの問題

危険な活動

デッドロック

デッドロックとは何ですか?

二人の小さな道ブロック一緒に、あなたは私が最初に行かせ言って、Bはお互いに、2人が通過行くと、私はあなたが私を手放すことはできませんノーと言いました。

スレッドロックbのスレッドが待機は、B-スレッドのタスクはここで終わることのない、ロックストップを取得しようとして、スレッドのロックのための2つのスレッドを待っています。

1.png

デッドロックのカテゴリ:

静的ロックデッドロックの順序

2.png

コードを見て、デッドロックの問題として直接見ることができます。

ダイナミックなロックデッドロックの順序

コードは、よさそうだだけ実行し、特定の極端な状況下に表示されます。

3.png

場合fromAccountとtoAccount相互転送同時に、第1の層と同期開始の両方にロックデッドロックを取得しようとする同期のときに、第2の層を生じます。

リソースデッドロック

ロック複数のスレッドが共通のリソースにアクセスします。

飢餓のデッドロック:

スレッドおよびその他のリソースは、このような転送インタフェースとして、必要以上に少なくなっているデータベースにアクセスするときに、何の応答されていません。

デッドロックの道を防ぎます:

タイミングのtryLockロックを表示するための方法、ロック・タイムアウトを取得しようとする試みは、ロック取得動作を控える後、永久避けるようにしてください。

2.デッドロックを回避するために、プログラムロジックを調整します。

ライブロック

最初の後に完了することはできません同じタスクを実行した後、繰り返しの歴史の繰り返しを実行し、完了することがありませんでした。

パフォーマンスとスケーラビリティ

パフォーマンス:として多くの操作を行うことが可能短時間限り少ないリソースを使用します。

スケーラビリティ:スループットと処理能力がある限り機械、スループットおよび処理能力を増大させることができる追加するなど、十分ではありません。

もたらすマルチスレッドのオーバーヘッド?

1.コンテキストスイッチング

2.メモリの同期

同期及び揮発性メモリ提供視認性メモリのオーバーヘッドの原因となり、メモリバリアは、命令キャッシュCPUリフレッシュしばしば抑制コンパイラ最適化操作(例えば、コードの重量のこの部分を防ぐために(また、メモリバリアメモリバリアとしても知られる)を使用することができますソート、自動的に不要なロックを外す)、主にメインメモリとスレッド同期CPUキャッシュにアクセスします。

4.png

3.障害物

排他ロックは、パフォーマンスとスケーラビリティに大きな脅威です。

X =ロック要求頻度の脅威ロックが占有されるたびに

低脅威レベル、競争スレッドロックの程度が低いです。

ロックの競争の程度を低減するための方法:

1.ロック周波数要求を削減

時間ロック占領の2削減

保護されたロックコードは、すべての外出、長いタスクを実行するのではなく、何のコードロック保護可能な限り短くすることなく、可能な限り小さなロックの粒度(クラスオブジェクトのロックロックを使用することはできません、ローカルのコードブロックを使用する必要があります、)Kuaijinkuaichuのメソッドロックを使用しないでください。

3.調整メカニズムで排他ロックを使用します

これは、高い並行性を提供します。(このようなセグメント化されたロックなど、読み書きロック)

ノンブロッキング同期

おすすめ

転載: www.cnblogs.com/powerjiajun/p/11564196.html