並行プログラムとその利点と欠点を構築するには、3つの方法
1、プロセス
このように、各論理プロセスは、への制御フローであり、カーネルスケジューラによって維持されます。プロセスは独立した仮想アドレス空間を持っているので、明示的なプロセス間通信メカニズムのいくつかの種類でなければならない他のフロー制御フローと通信します。
利点:
プロセスが別のアドレス空間を持っているので、プロセスは誤って多くの混乱エラーを排除し、別のプロセスの仮想メモリを上書きすることはできませんので、
短所:
(1)またはによるプロセスは、プロセスが状態情報を共有することがより困難になるように、別個のアドレス空間を有しています。共有情報のために、彼らは、明示的なIPC(プロセス間通信)メカニズムを使用しなければなりません。
高いプロセス制御及びIPCオーバーヘッド(2)により、このアプローチは比較的遅いので
2、I / Oマルチプレクサ
並行プログラミングのこの形態では、明示のプロセスのコンテキスト内のアプリケーションは、独自の論理フローをスケジュールします。論理フローは、データが到着した後、メインプログラムが明示的に1つの状態から別の状態に変換するステートマシン、ファイルディスクリプタとしてモデル化されます。プログラムが別のプロセスであるため、そのすべてのストリームは、同じアドレス空間を共有しています。
利点:
プロセスベースの設計(1)よりもプログラマは、プログラムの動作をより詳細に制御できます。
I / Oは、イベント駆動型サーバを多重化に基づいて(2)は、それぞれが全アドレス空間の論理フローにアクセスできるように、単一のプロセスのコンテキストで実行されています。これは、フロー間で共有されるデータが容易になることができます。
単一プロセス関連利点として、(3)とランはあなただけのプログラムの順序として、あなたの同時サーバーをデバッグするために、GDBなど、おなじみのデバッグツールを使用することができるということです。
彼らは新しいストリームにスケジューリングプロセスのコンテキストスイッチを必要としないので、(4)イベント駆動型設計は、プロセスベースの設計よりも、多くの場合、はるかに効率的です
短所:
(1)符号化の複雑
(2)は、マルチコアプロセッサを最大限に活用することができません
3、スレッド
スレッドは、カーネルによってスケジュールプロセスコンテキストの単一の動作ロジックフローです。あなたは、カーネルによってスケジュールなどのプロセスストリームのような他の二つの方法のハイブリッドとしてスレッドを考えると、同じ仮想アドレス空間を共有するよう多重化I / Oのようなことができます。
利点:
マルチコアサーバを利用する(1)
(2)速いです
ルーム(3)スレッドの共有データは非常に便利
短所:
同じプロセスので、スレッドの安全性の問題を生じやすいです
プロセス間通信
図1に示すように、連通管匿名
2、高度なパイプ通信
3、名前付きパイプ通信
図4に示すように、通信メッセージ・キュー
5、信号量通信
図6に示すように、信号
7、共有メモリ通信
図8に示すように、通信ソケット
参考:
https://blog.csdn.net/violet_echo_0908/article/details/51201278