高い同時実行への()に必要な基礎概念の概要

任意の言語を学ぶことは把握する考え方に基づいて、基本的な学術的な概念は、その内部実装の原則の下に到達するために行く最初のマスターです。並行プログラミングの学習、我々はまた、基本的な概念を把握した後、その実装の原則を学ぶために、そして最終的に適切なシーンにそれを適用する必要があります。

まず、必要な基本的な概念

1.同期(同期)と非同期(非同期)

同期:呼び出されたら、彼らはコードが終了した後、後続のコードは、リアルタイムデータ同期方法のリターンを使用することができます従うことを進むことができます前に、同期方法、同期メソッド呼び出しのスレッドは、この同期方法は待たなければなりません。

非同期:非同期メッセージより、メインスレッドが非同期メソッドの実行メッセージが別のスレッドでのスレッド、非同期メソッド実行経験の別の方法に送られた場合、非同期メソッドを呼び出し、しません妨げる現在の方法、の通過あるプロセスのメインスレッドに従って、非同期メソッドを呼び出した後、メインスレッドは、他のプロセスが実行を終了した非同期メソッドを待ってブロックしない非同期メソッドの実行直後になります。非同期メソッドは、値を返す場合、非同期メソッドの終了時にメインスレッドに通知します。

2.同時(並行)およびパラレル(並列の)

並行性:同時に「代替」実行、実行タスクAに焦点を当てる複数のタスクは、タスクBを実行し、システムは、2つの間で切り替わります。

パラレル:同時に実行する複数のタスクに集中するパラレル、それは本当の意味での「両方」です。

シングルコアCPUシステムでは、CPUは、システムが停止することはできません、パラレルこの時間が起こることはできないが、マルチプロセス又はマルチスレッド同時タスクが発生する可能性があり、同時に複数のコマンドを実行することは不可能であるたびに一つの命令を実行します並行性を達成するためにタスクを切り替えます。並列計算機のための基本的な条件は、コンピュータがマルチコアCPUです。

3.クリティカルエリア

クリティカル領域:クリティカルセクションは、地域で共有することができ、複数のスレッドで、その中に格納されたデータは、公開リソースが、アクセスがあるか、スレッドだけで行うことができ、この領域内のデータを変更、他のスレッドが唯一の前で待つことができますクリティカル領域終了後のスレッドのアクセスまたは変更データがアクセスを続けるか、変更することができます。

4.(ブロッキング)および非ブロッキング(非ブロッキング)がブロック

ブロッキング:彼らはクリティカルセクションにアクセスし続けることができます前に、ブロッキングとノンブロッキングのスレッド間の相互作用を記述するために使用され、スレッドは、それが重要なリソースエリアを占有意味ブロックされ、他のスレッドは、地域の重要なリソースへの以前のスレッドのアクセスの完了を待つ必要があります現在のスレッドは、スレッドがタイムアウトしても、雪崩を引き起こす可能性がお待ちしております従って、リソースによって占有されている場合は、後続のスレッドで結果を遮断するリソースは、ハングアップします。

ノンブロッキング:非ブロック手段は、スレッド間でお互いに影響を与えません、各スレッドは常に前進、スレッド間でお互いを待ちませんを実行しています。

デッドロック(デッドロック)、空腹(飢餓)とライブロック(ライブロック)

デッドロック、ライブロックや飢餓は、フレーズの活動スレッドに記載されています。これら三つのいずれかで複数のスレッドが、それはマルチスレッド環境では、そのプログラムを示している場合、もはやもはや正常な実行することができないかもしれません。

デッドロック:デッドロックは、複数のスレッドで、マルチスレッド環境は非常に深刻な問題である、それぞれ他のスレッドが、これは基本的に発生した直後に、待っている懸濁複数のスレッドで、その結果、基本的なリソースの実行を継続し、解放しません占めますプログラムの崩壊につながりました。

飢餓:飢餓は、スレッドが継続することができなかった原因と、その正常な動作の基本的なリソースを取得することはできません何らかの理由で1つまたは複数のスレッドを指します。優先度の高いスレッドは多くの場合、リソースを先取りしながら、その理由は、低スレッドの優先順位が含まれます。

ライブロック:謙虚は常にに保管スレッドの結果であるため、スレッド間のライブロック手段は、スレッド間で、多くの場合、他のスレッドの正常な実行を確保するために他のリソースを使用するためのリソースを提供しますお互いのイニシアチブの「謙虚」の原則を支持するが、スレッドを破って、スレッドは通常、正常にすべてのリソースを取得することはできません。

第二に、並行処理レベル

最も心配マルチスレッド環境では、クリティカルセクションのリソースへの同時アクセスを制御する必要があり、地域の重要なリソースへのアクセスです。同時戦略によると、への同時実行の一般的なレベルのブロッキング、ない飢餓、バリアフリー、ロックフリーおよびいくつかのノーウェイト。

1.閉塞

重要なリソース領域は、現在のリソースがスレッドを実行し続けることができない、あなたがリソースへのアクセスやリソースを解放するために、他のスレッドの前に現在のスレッドを取得するようにする前に、synchronizedキーワードまたは再入国ロックを使用している変更された場合、スレッドは、ブロックされていますブロックされたスレッド。

2.ノー・ハンガー(飢餓-無料)

マルチスレッド環境、優先度の高いいくつかのスレッド、優先度の低いスレッドは、スレッドのスケジューリングに不利益を占有する傾向がある場合は、重要なリソース領域の時間配分、優先順位の低いスレッドのニーズを満たすことがしばしばできない、低優先度が得られスレッドが適切に実行することができません。明らかに、このような状況は不公平である、それは飢餓の優先度のスレッドを下げるためにつながります。この不公正ロックは優先度の高いスレッドが飢餓の低い優先度のスレッドで、その結果、キューをジャンプすることができます。スレッドのスケジューリングした場合、システムのスレッドはすべて平等に扱われ、その後、優先度の高いスレッドはまた、「最初に来る最初の務め」の原則に従わなければならない、我々は実行できない低い優先度のスレッドのリスクを解決することができます。

3.アクセシビリティ(閉塞-無料)

アクセシビリティは妨げられた場合、それが中断されるパーティのスレッドにつながったデータの重要なエリアを共有することはありません二つのスレッドを実行し、非ブロック最も弱い予定です。あなたはデータの異常を見つけた場合、スレッドは、それがロールバックされたときに珍しいことではない場合である。つまり、複数のスレッドが同時に、変更、保存、修正するために専用の重要な領域にデータを共有することができ、重要な領域に入ることができ、あなたは、通常の実行プロセスに従って、完全なクリティカルセクションに共有データを変更することができます。

障害物が必須であるため、コントラストがブロックし、バリアフリーの並行処理レベル、閉塞悲観的な制御戦略として理解することができる他のスレッドを一時停止し、データセキュリティ、アクセシビリティと制御は楽観的な戦略として理解することができることを確認、それはそれより楽観的です競合が発生した場合、複数のスレッドが、その後、ロールバックの重要なゾーンの成功アウトできるように、紛争のスレッド共有データ操作の重要な領域は、発生していない、または衝突確率は非常に低いと考えられています。

バリアフリーのための制御戦略は、「アイデンティティマーカー」によって行うことができ、基本的な原理は、操作データをスレッディングする前に、重要な地域である、マーク、現在のクリティカルセクションデータを読み込み、スレッドが終了したときにデータを変更し、再度これを読んでマークが変更されない場合は他のスレッド改訂データというマークは、その後、あなたはデータを直接保存することができますし、マーカーは、スレッドの動作データ中に修正、あなたがデータを変更した場合、スレッドは、マークが他のスレッドによって変更された見つけ、その後、リソースへのアクセスは、現在のスレッドのデータのロールバックを考えて衝突しました。

4.ノーロック(ロックフリー)

ロックフリーの並列は、ロックシーンが存在しない場合に、データの重要な領域は、同時に複数のスレッドから同時にアクセスが、常に有限数のステップ内の重要な領域に完全なデータへのスレッドがあることを確認することができ、アクセス性として理解することができますアクセスとセキュリティがクリティカルセクションを終了します。

5.ノーウェイト(待ち-無料)

待たずにノーロック・ストラテジー、並行処理レベルへの相対は、かつての拡張である、ないロックはありません成功したスレッドを必要とするすべてのスレッドを待たずに残すために重要な領域と安全保障へのアクセスを制限しなければならない必要が完全なステップ内の重要な領域へのアクセス、および飢餓が発生することはありません。

データの読み出しすべてのスレッドが制御されておらず、すべてのスレッドが同時にに関連するデータを、読み取ることができます。一般的なアプリケーションのケースを待っているのいかなる同時方式は、RCU(リードコピーアップデート)されていない、基本的な考え方は原則があります書き込みデータは、すべての書き込み操作が参照元のデータを更新するために、適切なタイミングでデータが終了した後、コピー上で実行される実行データのコピー後に元のコピーです。マルチスレッドのセットが待機されていない読んで、書き込みコレクションはコピーのセットで行われ、適切なタイミングでのデータを更新するために、JavaのCopyOnWriteArrayListとのセットは、同時方式の代表的な応用例のための待ち時間はありませんがあります上の参照の元のコレクション。

Javaの山(マイクロ・シグナル:itlemon)私のマイクロチャンネル公衆数により乾燥品、歓迎の注意を学びます
公共マイクロチャンネル番号 -  Javaの殺陣-itlemon

公開された73元の記事 ウォン称賛84 ビュー470 000 +

おすすめ

転載: blog.csdn.net/Lammonpeter/article/details/103134809