ホームページ  >  記事  >  Java  >  Javaの同時実行性とは何ですか?

Javaの同時実行性とは何ですか?

青灯夜游
青灯夜游オリジナル
2019-12-26 17:13:063886ブラウズ

Javaの同時実行性とは何ですか?

#同時実行性とは何ですか?

同時実行性: 一定期間内に複数のタスクを交互に実行することを指します。複数のスレッドが動作している場合、CPU の実行時間をいくつかの時間帯に分割し、各時間帯を各スレッドに割り当てて実行します。 1 つのスレッドのコードが実行されている間、他のスレッドは一時停止されます。

並行環境では、プログラムの閉鎖性が崩れ、次のような特徴が現れます。

##● 並行プログラム間には、相互に制約関係があります。直接的な制約は、別のプログラムの計算結果を必要とする 1 つのプログラムに反映され、間接的な制約は、プロセッサやバッファなどの共有リソースをめぐって競合する複数のプログラムに反映されます。

# 同時実行プログラムの実行プロセスは断続的です。プログラムは現場での指示と実行ポイントを記憶する必要があります。

#同時実行数が適切に設定されており、CPU に十分な処理能力がある場合、同時実行によりプログラムの実行効率が向上します。

同時環境では、オブジェクトに複数のスレッドがアクセスできる場合、アクセスされたスレッドによってオブジェクトが変更され、データの不整合が発生します。そこで、スレッドセーフの概念が提案されています。

同時実行性と並列処理

は、非常に混乱を招く概念です。並行性とは複数のタスクを交互に実行することを指しますが、並列性は本当の意味で「同時に実行する」ことを指します。実際、CPU が 1 つしかないシステムでマルチスレッドを使用すると、実際のシステム環境では並列化できず、タイムスライスを切り替えて交互にタスクを同時実行するしかありません。真の並列処理は、複数の CPU を備えたシステムでのみ発生します。

[推奨学習:

Java ビデオ チュートリアル ]

なぜ同時実行性を使用する必要があるのでしょうか?

同時プログラミングは、ある程度マルチコア CPU の開発と切り離せません。シングルコアCPUの発達により、「ムーアの法則」に従うことができなくなりました(ムーアの法則はハードウェア開発の観測法則であり、「ムーアの法則」に基づく「反ムーアの法則」もありますが、) 「反ムーアの法則」はソフトウェア分野の法則です。興味のある方はご自身で学習してください。)コンピューティング速度をさらに向上させるために、ハードウェア エンジニアは個別のコンピューティング ユニットを追求するのではなく、複数のコンピューティング ユニットを統合します。それはマルチコアCPUを形成することです。わずか 12 年で、Intel i7 などの家庭用 CPU は 4 コア、さらには 8 コアに達する可能性があります。プロフェッショナル サーバーには通常、複数の独立した CPU が搭載されており、各 CPU には最大 8 コア以上のコアが搭載される場合もあります。

したがって、CPU コアの拡張では「ムーアの法則」が引き続き経験されると思われます。マルチコア CPU の文脈では、同時プログラミングのトレンドが生まれています。

同時プログラミングの形式を通じて、マルチコア CPU の計算能力を最大化し、パフォーマンスを向上させることができます。

これは本質的に、特殊なビジネス シナリオでの同時プログラミングに適しています。たとえば、画像処理の分野では、1024X768 ピクセルの画像には 786,000 個を超えるピクセルが含まれています。片面のすべてのピクセルを走査するには長い時間がかかるため、このような複雑な計算にはマルチコアの計算能力を最大限に活用する必要があります。

また、ショッピングプラットフォームを開発する場合、応答速度を向上させるために、分割、在庫削減、注文生成などの操作をマルチスレッド技術を使用して分割して完了することができます。複雑なビジネス モデルに直面すると、逐次プログラムよりも並列プログラムの方がビジネス ニーズに適応しやすく、この種の事業分割にも並行プログラミングの方が適合しやすいため、まさにマルチスレッド テクノロジが評価されるのです。これは、CS 学習者が習得すべき事項でもあります。

##● マルチコア CPU のコンピューティング能力を最大限に活用する;

#● 便利なビジネス分割とアプリケーションのパフォーマンスの向上

同時プログラミングの欠点は何ですか?

1. 頻繁なコンテキスト切り替え

タイムスライスとは、CPU が各スレッドに割り当てた時間であり、この時間が非常に短いため、CPU は常にスレッドを切り替え、複数のスレッドがあり、それらは同時に実行され、タイムスライスは通常数十ミリ秒です。

切り替えるたびに、以前の状態を復元できるように現在の状態を保存する必要があります。この切り替え動作はパフォーマンスに非常に負荷がかかります。切り替えが頻繁すぎると、マルチスレッド プログラミングを活用できなくなります。一般に、コンテキストの切り替えは、ロックフリーの同時プログラミング、CAS アルゴリズム、最小限のスレッドの使用、およびコルーチンの使用によって減らすことができます。

ロックフリーの同時プログラミング: ConcurrentHashMap ロック セグメンテーションのアイデアを参照できます。異なるスレッドがデータの異なるセグメントを処理するため、マルチスレッドの競合条件下では、コンテキストの切り替え時間が長くなります。削減。

CAS アルゴリズムは、CAS アルゴリズムを使用してデータをアトミックに更新します。オプティミスティック ロックを使用します。これにより、不必要なロック競合によって引き起こされるコンテキスト スイッチの一部を効果的に削減できます。

使用するスレッドは最小限に抑えます。作成を避ける不要なスレッド、例えばタスクが少ないのにスレッドがたくさん作成されると、大量のスレッドが待ち状態になります スレッド内で複数のタスクを切り替え続ける

コンテキストの切り替えは比較的時間のかかる操作であるため、「The Art of Concurrent Programming in Java」という本に実験が記載されていますが、同時蓄積はシリアル蓄積よりも高速ではない可能性があります。

2. スレッド セーフティの問題

マルチスレッド プログラミングで把握するのが最も難しいのは、クリティカル セクションのスレッド セーフティの問題です。注意しないとデッドロックが発生します。 , システム機能が利用できなくなる可能性があります。

以上がJavaの同時実行性とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。