#コントラストの次元
|
複数のプロセス
|
複数のスレッド
|
概要
|
データ共有と同期 |
データ共有は複雑であり、IPC が必要です; データは分離されているため、同期は簡単です
| プロセスデータが共有されるため、データの共有は簡単ですが、同期も複雑です | それぞれに独自の利点があります |
メモリ、CPU | 大量のメモリを占有、複雑なスイッチング、低速、低い CPU 使用率 | 占有メモリが少なく、単純なスイッチング、高い CPU 使用率 | スレッドの利点をさらに見る |
作成、破棄、切り替え | 作成と破棄、切り替えは複雑で遅い | 作成と破棄、切り替えシンプルで速い | マルチスレッドの利点 |
プログラミングとデバッグ | 単純なプログラミング、単純なデバッグ | 複雑なプログラミング、複雑デバッグ | 複数プロセスの利点 |
信頼性 | プロセスは相互に影響を与えません | 1つのスレッドがハングアップすると、プロセス全体が停止します。ハングアップします | 複数のプロセスの利点 |
分散型 |
マルチコア、マルチマシン分散型に適用可能(1 つの場合) 1 台のマシンでは十分ではありません。複数のマシンに拡張するのは比較的簡単です。
| 適用対象マルチコア分散
| マルチプロセスの利点 |
##マルチスレッドの利点:
複数プロセスの利点:
各プロセスは互いに独立しており、メイン プログラムの安定性に影響を与えません。子プロセスがクラッシュしても問題ありません。
CPU を追加することでパフォーマンスを簡単に拡張できます。
#スレッドの影響を最小限に抑えることができます。ロック/ロック解除が可能になり、パフォーマンスが大幅に向上します。
マルチスレッドの欠点:
各スレッドはアドレス空間を共有します。メイン プログラムと連動しており、サイズが制限されている;
スレッド間の同期とロックが面倒;
1 つのスレッドが崩壊すると、プログラム全体の安定性;
一定のスレッド数に達すると、CPU を増やしてもパフォーマンスが向上しません;
複数プロセスの欠点:
ロジック制御は複雑で、メイン プログラムと対話する必要があります。
プロセス境界を越える必要があり、大規模なデータ送信がある場合には適していません。
-
マルチプロセス スケジューリングのオーバーヘッドは比較的大きいです
アプリケーションの状況は次のとおりです。
1) 頻繁に作成および破棄する必要がある スレッドを使用する
# これの最も一般的な原則は Web サーバーです。接続が確立されるとスレッドが作成され、切断されるとスレッドは破棄されます。プロセスを使用する場合、作成と破棄のコストを負担するのは非常に困難です。
2) 大量の計算を実行する必要があるスレッドを優先する
いわゆる大量の計算は、大量の CPU を消費します。この場合、スレッドが最適です。
この原理は、画像処理とアルゴリズム処理で最も一般的に使用されます。
3) 強相関処理にはスレッド、弱相関処理にはプロセスを使用します。
強相関と弱相関とは何ですか?理論的に定義するのは非常に難しいので、例を挙げて説明します。
一般的なサーバーは、メッセージの送受信、およびメッセージの処理というタスクを実行する必要があります。 「メッセージの送受信」と「メッセージの処理」は関連性の低い処理であり、「メッセージの処理」は「メッセージのデコード」と「ビジネスの処理」に分かれており、この 2 つの業務は比較的強い関係にあります。そのため、「メッセージの送受信」と「メッセージの処理」を別プロセスで設計したり、「メッセージのデコード」と「業務処理」を別のスレッドで設計したりすることができます。
4) プロセスを使用したマルチマシン分散およびスレッドを使用したマルチコア分散に拡張される可能性があります (具体的な理由については、上の表を参照してください)
リソースの消費:
カーネルの観点から見ると、プロセスの目的は、システム リソースを割り当てるための基本単位として機能することです ( CPU 時間、メモリなど)。スレッドはプロセスの実行ストリームであり、CPU のスケジューリングとディスパッチの基本単位であり、プロセスよりも小さく、独立して実行できる基本単位です。
スレッドは同じアドレス空間を使用し、ほとんどのデータを共有します。スレッドの開始に必要なスペースは、プロセスの開始に必要なスペースよりもはるかに小さく、スレッド間の切り替えに必要な時間もはるかに短くなります。プロセス間の切り替えにかかる時間よりも。
通信方法:
データはプロセス間で通信によってのみ転送できますが、時間がかかり不便です。スレッド時間データのほとんどは共有されるため、高速で便利ですが、データの同期にはロックが必要です。
スレッドの利点:
アプリケーションの応答を改善し、CPU システムをより効果的に使用します。 オペレーティング システムは、スレッドの数が不十分です CPU の数が CPU の数より大きい場合、異なるスレッドが異なる CPU で実行されます; プログラム構造を改善するために、長く複雑なプロセスを複数のスレッドに分割し、いくつかの独立したスレッドまたは独立したプロセスにすることができます。半独立した部分があるため、このようなプログラムは理解しやすく、修正も容易です。
関連する推奨事項: 「Linux ビデオ チュートリアル 」