スレッド通信機構:共有メモリ、メッセージVSを渡します

並行プログラミング、我々は二つのスレッド間の通信を考慮しなければならないかの問題で。ここでの通信は、異なるスレッド間での情報のやり取り方法を指します。
2つの方法があります。

共有メモリ
メッセージング(俳優モデル)
#共有メモリ
共有メモリは、このように、私たちは多くの場合、共有変数を設定し、より一般的です。その後、複数のスレッドが共有変数で動作します。スレッド通信を実現するように。例えば、我々はタスクがページをクロール実行するために複数のスレッドを使用して、我々は、完了したタスクの数を記録するために、共有変数の数を使用することができます。スレッドがタスクのクロールを完了するたびに、オリジナルの数に1」によって追加されます。したがって、各スレッドは、カウント変数を取得することにより、現在のタスクの完了を取得できること。もちろん、それはまた、メモリエラーが発生しやすい理由の嘘を共有共有変数の同期であると見なされなければなりません。
ここに画像を挿入説明

異なるスレッド間のこの通信モデルは直接リンクしていません。これは、共有変数を通じて、この相互作用している「仲介を。」そして、この「仲介」、必要な場合、クリティカル領域で保護する必要がある(ロックまたは同期化)。このように、一度共有変数は、より多くの人気となり、多くの異なるスレッドオブジェクトの相互作用を含む、この管理は非常にデッドロックやその他の問題のために非常になりやすい、複雑になります。
与えられたケース

#メッセージング
メッセージパッシングは異なるスレッド間の相互作用の目的を達成するための明確なメッセージを送信することにより、スレッド間の直接通信を要します。最も有名な方法メッセージングは、俳優のモデルでなければなりません。このモデルでは、すべてが俳優で、すべての俳優の間の通信は、にメッセージを渡すことによって到達しなければなりません。各アクターは、他の通過アクターに受信したメッセージを保存する受信ボックス(メッセージキュー)を持っています。俳優自身も自分にメッセージを送ることができます。これは、オブジェクト指向ああの本質であります!
ここに画像を挿入説明
このモデルは、共有メモリモデルよりも複雑であるように思われます。複雑なビジネス・ケースに遭遇したら、しかし、有利な俳優モデルが明示されます。私たちは、このモデルを解決する方法の例を見て、まだサイトだけでマルチスレッドクロールました。
まず、我々は、タスク完了の量をカウントするために使用される統計の俳優を定義します。複数のクロール俳優、俳優のグラブハンドルタスクが完了するとメッセージ通知タスク統計俳優を送信するために、自身が保存した変数count統計俳優(唯一の俳優が統計を確認するため)に続いて複数のURL(メッセージモード)プラスA。
最後に、私たちはこれらの2つの通信モードを総括してみましょう:

同時実行モデル 通信メカニズム 同期メカニズム
共有メモリ 一般的な状態が書き込むことによって、スレッド間のスレッド間でプログラムを共有 - 暗黙的にメモリを読んで共通の状態を伝えます 同期は明示的に行われます。プログラマが明示的メソッドまたはスレッド間の相互排除を実行するために必要なコードの一部を指定しなければなりません。
メッセージング (俳優)糸の間には、公開ステータスは、明示的にスレッド間の明示的なメッセージを送信することで通信してはなりません。 メッセージは、メッセージを受信する前に送信されなければならないので、このようにして同期が暗黙的に行われます。
公開された10元の記事 ウォンの賞賛9 ビュー446

おすすめ

転載: blog.csdn.net/weixin_43829047/article/details/104924705