プロセス間およびスレッド間の通信

プロセス間およびスレッド間の通信

0X00プロセス間の通信方法

0X01の概要

各プロセスには独自のアドレス空間があるため、リソース占有の観点からは、異なるプロセスは互いに独立しています。つまり、明らかな境界があります。したがって、スレッドと比較して、通信は少し難しいです。より一般的に使用される方法はパイプメッセージキューセマフォシグナル共有メモリソケットです。

0X02パイプライン

パイプには主に名前なしパイプ名前付きパイプが含まれます。
パイプは、関連する親プロセスと子プロセス間の通信に使用できますパイプの機能に加えて、既知のパイプでは、関連のないプロセス間の通信も可能です。

普通パイプパイプ

1.半二重(つまり、データは一方向にのみ流れる)であり、読み取りと書き込みの終了が固定されています
。2 関係のあるプロセス(親子プロセスまたは親子プロセス)間の通信にのみ使用できます。兄弟)プロセス間)
3。特別なファイルと見なすことができ、通常の読み取り、書き込み、およびその他の機能を読み取りと書き込みに使用することもできます。ただし、これは通常のファイルではなく、他のファイルシステムに属しておらず、メモリ内にのみ存在します

名前付きパイプFIFO

1)FIFOは無関係なプロセス間でデータを交換できます
。2)FIFOにはパス名が関連付けられており、特別なデバイスファイルの形式でファイルシステムに存在します。

0X03メッセージキュー

メッセージキューは、メッセージのリンクリストであり、カーネルに格納され、メッセージキュー識別子によって識別されます。メッセージキューが少ない信号伝達情報の欠点を克服するパイプラインは、不定様式バイトストリーム、運ぶことができる限られたバッファサイズを

機能:
1)メッセージキューはレコード指向であり、その中のメッセージには特定の形式と特定の優先度があります。
2)メッセージキューは、送信プロセスと受信プロセスから独立しています。プロセスが終了しても、メッセージキューとその内容は削除されません。
3)メッセージキューは、メッセージのランダムクエリを実現できます。メッセージは先入れ先出しの順序で読み取る必要はなく、メッセージの種類に応じて読み取ることもできます。

0X04セマフォ

セマフォは、すでに導入されているIPC構造とは異なり、共有リソースへの複数のプロセスのアクセスを制御するために使用できるカウンターです。セマフォは、プロセス間の通信用のデータを格納するためではなく、プロセス間の相互排除と同期を実現するために使用されます。

機能:
1)セマフォはプロセス間同期に使用されます。プロセス間でデータを転送するには、共有メモリと組み合わせる必要があります。
2)セマフォは、オペレーティングシステムのPV操作に基づいており、プログラムによるセマフォの操作はすべてアトミック操作です。
3)セマフォでの各PV操作は、セマフォ値に1を加算または1を減算することに限定されず、任意の正の整数を加算または減算できます。
4)セマフォグループをサポートします。

0X05シグナル(シグナル)

シグナルは、より複雑な通信方法であり、イベントが発生したことを受信プロセスに通知するために使用されます。
たとえば、親プロセスにシグナルを送信する子プロセスで、親プロセスにリサイクルを許可します

0X06共有メモリ(共有メモリ)

これにより、複数のプロセスが同じメモリスペースアクセスできるようになり、異なるプロセスは、共有メモリ内のデータが他のプロセスで時間内に更新されていることを確認できます。この方法は、ミューテックスやセマフォなど、ある種の同期操作に依存する必要があります。

特徴:
1)プロセスがメモリに直接アクセスするため、共有メモリは最速のタイプのIPCです
。2)複数のプロセスが同時に動作できるため、同期する必要があります
。3)セマフォ+共有メモリは通常、組み合わせて使用​​されます。セマフォ共有メモリへのアクセスを同期するために使用されます

0X07ソケット(SOCKET)

ソケットはプロセス間通信メカニズムでもあり、他の通信メカニズムとは異なり、異なるホスト間のプロセス通信に使用できます。ネットワークを介して通信できます。

0X10スレッド間の通信

0X11の概要

ここで説明する必要があるのは、ここで説明しているスレッドは同じプロセスのスレッドであるということです。そうでない場合は、通信のプロセスに戻ります。
スレッドは同じアドレス空間にあるため、スタック空間とレジスタ情報が異なり、他のリソースが共有されるため、通信は比較的簡単です。
通信について話すのではなく、同期の問題を解決することです。クリティカルセクションミューテックスセマフォイベント(シグナル)などいくつかの方法があります。

0X12クリティカルセクション

マルチスレッドシリアル化を介して共通のリソースまたはコードにアクセスします。これは高速で、データアクセスの制御に適しています。

0X13ミューテックス(同期/ロック)

ミューテックスオブジェクトメカニズムでは、ミューテックスオブジェクトを所有するスレッドのみがパブリックリソースにアクセスする権限を持ちます。ミューテックスは1つしかないため、パブリックリソースが複数のスレッドから同時にアクセスされないことが保証されます。

0X14セマフォ(センファレ)

限られた数のユーザーリソースを制御するように設計されており、複数のスレッドが同時に同じリソースにアクセスできるようにしますが、通常、このリソースに同時にアクセスできるスレッドの最大数を制限する必要があります。

0X15イベント(シグナル)(待機/通知)

マルチスレッド同期は通知操作によって維持され、マルチスレッド優先度比較操作も簡単に実装できます

おすすめ

転載: blog.csdn.net/rjszz1314/article/details/104319632