Javaの同じスレッド

黄舟
リリース: 2017-02-28 10:22:40
オリジナル
1423 人が閲覧しました

同一スレッドは同時実行モデルです。この同時実行モデルの意味は、単一スレッド システムが N 個の単一スレッド システムに拡張されることです。その結果、N 個のシングルスレッド システムが並列実行されます。

同一スレッド システムには複数のスレッドが含まれているため、純粋なシングル スレッド システムではありません。ただし、これらの各スレッドはシングルスレッド システムのように実行されます。

なぜシングルスレッドシステムなのか

今日、あなたはなぜすべてのシステムがシングルスレッドになるように設計されているのか不思議に思っているかもしれません。シングルスレッド システムは、同時実行モデルがマルチスレッドよりも単純であるため、人気が高まっています。シングルスレッド システムは、他のスレッドとデータを共有しません。これにより、スレッドが非同時データ構造を使用し、CPU と CPU キャッシュをより効率的に利用できるようになります。

残念ながら、シングルスレッド システムは最新の CPU を最大限に活用できません。最近の CPU には 2 つ、4 つ、またはそれ以上のコアが搭載されていることがよくあります。各コアは個別の CPU として機能します。シングルスレッド システムは、以下に示すように、これらのコアの 1 つだけを使用します。


同じスレッド、シングルスレッドの拡張機能

すべての CPU コアを完全に利用するには、シングルスレッド システムスケールアウトしてコンピュータ全体を利用できます。

CPU ごとに 1 つのスレッド

通常、同じスレッド システムは、コンピューターの CPU ごとに 1 つのスレッドを実行します。このコンピューターに 4 つの CPU、または 4 つのコアを備えた CPU が搭載されている場合、図に示すように、標準では同じスレッドの 4 つのインスタンス (4 つのシングルスレッド システム) が実行されます。


の状態 同一スレッドシステムは、内部で複数のスレッドが実行されているため、マルチスレッドシステムに似ています。しかし、ここには微妙な違いがあります。

同じスレッドとマルチスレッドシステムの違いは、同じスレッドシステムには共有データがないことです。スレッドによって同時にアクセスされるメモリはありません。同時データ構造などはありません。違いは以下の図に示されているとおりです。

共有状態の削減により、各スレッドはあたかもシングルスレッド システムであるかのように動作します。ただし、同一スレッドのシステムには複数のスレッドが含まれる可能性があるため、それは真の「シングルスレッド システム」ではありません。他に適切な名前がありませんが、このようなシステムを「シングルスレッド設計のマルチスレッド システム」と呼ぶよりも、同一スレッド システムと呼ぶ方が正確だと思います。同じスレッドを言うのは非常に簡単ですが、理解するのもさらに簡単です。

同じスレッドとは主にデータが同じスレッドで実行されることを意味し、共有データは存在しません。


負荷分散

明らかに、このワークロードで実行されている単一スレッド インスタンス間で同一スレッドのシステムを共有する必要があります。そうでない場合、1 つのインスタンスのみが作業を取得し、システムは実質的にシングルスレッドになります。

異なるインスタンス間で負荷を分散する正確な方法は、システムの設計によって異なります。その一部については、以下のセクションで説明します。 シングルスレッドのマイクロサービス

システムに複数のマイクロサービスが含まれている場合、各マイクロサービスはシングルスレッド モードで実行できます。複数のシングルスレッド マイクロサービスを同じコンピューターにデプロイすると、各マイクロサービスは別の CPU で別のスレッドを実行できます。

マイクロサービスはデータを共有しないため、同じスレッドのシステムの良い使用例となります。 データをシャードするサービスがあります

システムが実際にデータ、または少なくともデータベースを共有する必要がない場合は、データベースをシャードできる可能性があります。シャーディングとは、データが複数のデータベースに分割されることを意味します。データは、関連するデータが同じデータベースに配置されるように代表的に分離されます。たとえば、ある「所有者」エンティティに属するすべてのデータは、同じデータベースに挿入されます。シャーディングはこのチュートリアルの範囲外であるため、このテーマに関するいくつかのチュートリアルを確認する必要があります。

スレッドコミュニケーション

同じスレッド内のスレッドが通信する必要がある場合、メッセージパッシングを介して通信が行われます。スレッドはスレッド A にメッセージを送信したいと考えています。メッセージ (バイトのシーケンス) を生成することでこれを行うことができます。その後、スレッド B はメッセージ全体 (一連のバイト) をコピーして読み取ることができます。メッセージをコピーすることにより、スレッド B は、メッセージを変更する場合、スレッド A はメッセージを変更できないと判断します。コピーされると、スレッド A に対して不変になります。

このプロセスの概略図は次のとおりです:


このスレッド通信は、キュー、パイプ、Unix ソケット、および TCP ソケットで置き換えることができます。あなたのシステムに役立つものなら何でも。

よりシンプルな同時実行モデル

シングルスレッドであれば、独自のスレッドで実行されているすべてのシステムを同じスレッド システムを使用して実装できます。これは、内部同時実行モデルが共有状態のスレッドよりも単純になることを意味します。同時データ構造やすべての同時実行の問題について心配する必要はありません。

これは、シングルスレッド、マルチスレッド、同一スレッドのシステムの図です。違いの概要をより簡単に把握できます

最初の図はシングルスレッド システムを示しています:


2 番目の図は共有データを持つマルチスレッド システムを示しています:


3 番目の図は、分離されたデータを持つ 2 つのスレッドがあり、それらの間で情報を渡して通信する同一のスレッド システムを示しています。


上記は同じ Java スレッドの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート