Javaの並行プログラミング - 章並行プログラミングの課題

、Javaの並行プログラミングの課題

注意が必要な並行プログラミング問題:

並行プログラミングの目標は、プログラムがプログラムの最大同時実行を行うことができますより多くのスレッドを起動するより速く実行されますが、ないようにすることです。あなたが並行プログラムの実行を高速化したい場合は、マルチスレッドによって、次の問題の挑戦を受けることに。

ハードウェアおよびソフトウェアのリソースによって制限問題、デッドロックを切り替えるスレッドコンテキスト。

図1に示すように、スレッドコンテキストスイッチ

DESCRIPTIONスイッチングスレッドコンテキスト:タスクのタイムスライス割り当てアルゴリズムを実行するCPUサイクルが、各スレッドは、現在のタスクの実行スレッドは、タイム・スライスが完了した後に次のタスクにスイッチするCPUポーリングによって実行される通常の状況下で作業です。スイッチは、タスクの実行状態の前に保存され、その後、戻って次のタスクのために切断された場合には、タスクの実行をステップする場所を知っています。1つのタスクからのコンテキストスイッチがロードされたプロセスを再度保存することです。

タイムリーはまた、並行性を達成するために、各スレッドにシングルコアプロセッサ、CPUタイムスライスにおける複数の実行スレッドをサポートします。CPUのタイムスライスは、実行時間のスレッドが割り当てられ、CPUのタイムスライスは、(数十ミリ秒の)非常に短いので、CPUは私たちに、複数のスレッドが同時に実行印象を与えて、スレッドを切り替えておく必要があります。

たびに、コンテキストスイッチは、このようにマルチスレッドの実装の効率に影響を与え、資源の消費を必要とします。乾式多事で、すべてが少し乾い上にある間、人と同様にして何かを行うには、スイッチが手元に現在のタスクのノードに記録されなければならないとき。だから、より多くのものは、彼が高い、コンテキストスイッチのコストを作って、全体的な効率を下げます。

核となるアイデアは、コンテキストスイッチングを低減することである:できるだけロックの使用を低減する、スレッドの数を最小限に抑えます。

ロックフリー並行プログラミング:共有リソースを避けるため、コンテキストスイッチを起こすには、スレッドのロック競合などのマルチスレッド競争力のシーンです。モジュロハッシュタスクセグメントは、それぞれ異なるスレッド処理ジョブデータを使用することができます。

CASアルゴリズム:基本的なコードを使用して共有リソースの競合を解決し、ロックの使用を避けるために(CAS)アルゴリズムを置き換えるために比較して原子Javaパッケージ。

スレッドの最小数:アイドル状態にある多数のスレッドで、その結果、あまりにも多くのスレッドを作成しないように。以下のタスク、スレッドとより多くの場面で、その結果、待機状態にあるスレッドのような多数。

コルーチン:糸セグメントにタスク数として達成し、単一のスレッドで複数のタスクの切り替えを維持します。

ロックを使用しないようにする前の二つの方法、二つの方法の後にスレッドの数を最小限にすることです。

2、デッドロック

説明デッドロック:お互いに必要なリソースを保持している2つのスレッドを、そして彼らはまた、誰に断ったリソース、それぞれ他の二つのスレッドを膠着状態とリードを、解放するためにお互いを待っている間。

ロックが成功したように解放され、ロックされていないため、ロックの解除につながった例外をスローするときに我々は通常、このようなコードの吸盤を書き込みませんが、実際の運用で発生する可能性があり、ロックが解除され、通常の、または異常な状態ではありません。

デッドロックを回避する方法:

複数のロックを取得すると同時にスレッドを避けます。

スレッドは、同時にロックでロックリソースの通常のロックを複数のリソースを保持しないでください。

有効時間を超えた後の時間ロックを使用してみてください、ロックが自動的に解除されます。

3、資源制約の挑戦

説明:並行プログラミングでは、ハードウェアの制限またはソフトウェアリソースの対象、影響を受けたプログラムの実行速度が得られます。

ハードウェアとソフトウェアが一定の基準を持っている必要があることを前提に航空機、並行プログラミングを戦わない、何の対空砲がないため、ハードウェアとソフトウェアのリソースの制限は、欠陥があります。アップグレードするソリューションは、ハードウェアとソフトウェアをアップグレードすることです。

 

おすすめ

転載: www.cnblogs.com/aoshicangqiong/p/11442350.html