プロセス管理の基本的な知識
-
プロセスとは何ですか?スレッドとは何ですか?コルティンとは何ですか?
- 処理する
- 実行中のプログラムは、オペレーティングシステムのリソース割り当ての最小単位であり、独立したアドレススペースを持っています
- 動的:プロセスの本質は、マルチプログラムシステムでのプログラムの1回限りの実行プロセスです。プロセスは動的に生成され、動的に終了します。
- 同時実行性:任意のプロセスを他のプロセスと同時に実行できます
- 独立性:プロセスは、独立して実行できる基本単位であり、システムリソースの割り当てとスケジューリングのための独立した単位でもあります。
- 非同期性:プロセス間の相互制限により、プロセスは断続的に実行されます。つまり、プロセスは独立した予測できない速度で進行します。
- 構造的特徴:プロセスは、プログラム、データ、プロセス制御ブロックの3つの部分で構成されています
- 複数の異なるプロセスに同じプログラムを含めることができます。異なるデータセットのプログラムは異なるプロセスを構成し、異なる結果を得ることができますが、実行中にプログラムを変更することはできません。
- 糸
- 軽量プロセス(LWP)は、オペレーティングシステムスケジューリング(CPUスケジューリング)の最小単位であり、プロセスのエンティティです。
- メインスレッドは、作成プロセスで生成される最初のスレッドであり、メイン関数に対応するスレッドです。
- スレッド自体はシステムリソースを所有せず、操作に不可欠なリソースのみを所有しますが、プロセスが所有するすべてのリソースを同じプロセスに属する他のスレッドと共有できます。
- 1つのスレッドで別のスレッドを作成およびキャンセルでき、同じプロセス内の複数のスレッドを同時に実行できます
- スレッドには、準備完了、ブロック、実行の3つの基本的な状態もあります。
- コルティン
- スレッドよりも軽量で、ユーザーモードの軽量スレッドであり、コルルーチンのスケジューリングはユーザーによって完全に制御されます。
- コルーチンはスレッドによって実行され、2つのサブプロセスが互いに協力してタスクを完了します
- コルーチンは、サブルーチン内で中断できます。その後、他のサブルーチンを実行し、必要に応じて戻って実行を続行します。
- 処理する
-
プロセス、スレッド、およびコロチンの長所と短所は何ですか
-
処理する
- 各プロセスは互いに独立しており、メインプログラムの安定性に影響を与えません
- CPUを増やすことでパフォーマンスを向上させることができます
- スレッドのロック/ロック解除の影響を減らすことにより、パフォーマンスを向上させることができます
- プロセス間でリソースが共有されないため、リソース保護に役立ちます
- 論理制御は複雑であり、メインプログラムと対話する必要があります
- プロセスには独立したメモリスペースがあり、プロセスの作成にはコストがかかります
- マルチプロセススケジューリングのオーバーヘッドは比較的大きい
-
糸
- 同じプロセスのスレッドがリソースを共有するため、プログラムの効率が向上します
- スレッドの作成はより安価であり、実行はより少ないリソースを消費します
- スレッドは独立して実行することはできません。プロセスに存在する必要があります
- スレッド間で同期およびロック/ロック解除するのは面倒です
- 各スレッドはメインプログラムとアドレススペースを共有しますが、2GBのアドレススペースに制限されています
- 一定のスレッド数に達した後は、CPUを増やしてもパフォーマンスは向上しません。
- スレッドが改善できる全体的なパフォーマンスは限られており、スレッドが増えると、スレッド自体のスケジューリングもより多くのCPUを消費する必要があります。
-
コルティン
- スレッドコンテキスト切り替えのオーバーヘッドなし
- 制御フローを切り替えてプログラミングモデルを簡素化するのに便利
- 高い同時実行性、高いスケーラビリティ、低コスト
- コルーチンでは、ユーザーが独自のスケジューリングロジックを作成する必要があります
- マルチコアリソースを使用できない:coroutineの本質はシングルスレッドであり、単一のCPUのマルチコアを同時に使用することはできず、coroutineはマルチコアCPUで実行するプロセスと連携する必要があります
- プロセスブロック操作はプログラム全体をブロックします
-
-
プロセスとスレッドの違いと接続
- プロセスはリソース割り当ての最小単位であり、スレッドはcpuスケジューリングの最小単位です
- スレッドは1つのプロセスにのみ属することができ、プロセスは複数のスレッドを持つことができますが、少なくとも1つのスレッド
- リソースはプロセスに割り当てられ、同じプロセスのすべてのスレッドがプロセスのすべてのリソースを共有します。
- 同時実行性:プロセスを同時に実行できるだけでなく、同じプロセスの複数のスレッド間でも実行できます
- システムのオーバーヘッド:マルチプロセスプログラムはマルチスレッドプログラムよりも堅牢ですが、プロセスを切り替えると、より多くのリソースを消費し、効率が低下します
-
マルチスレッドと比較して、coroutineの利点は何ですか?
- 非常に高い実行効率:サブプログラムの切り替えはスレッドの切り替えではなく、プログラム自体によって制御されるため、スレッドの切り替えのオーバーヘッドはありません。マルチスレッドと比較して、スレッドが多いほど、coroutineのパフォーマンス上の利点が明らかになります。
- マルチスレッドロックメカニズムは必要ありません。スレッドが1つしかないため、同時に変数を書き込む際の競合がなく、共有リソースがロックせずにルーチンで制御され、状態のみが判断されるため、実行効率がマルチスレッドよりもはるかに高くなります。
-
プロセスタイプ
- インタラクティブプロセス:シェルによって開始されるプロセス。インタラクティブプロセスは、フォアグラウンドまたはバックグラウンドで実行できます。
- バッチプロセス:この種のプロセスは端末とは関係がなく、一連のプロセスです。
- 監視プロセス(デーモンプロセスとも呼ばれます):Linuxシステムが起動し、バックグラウンドで実行されるときに開始されるプロセス。
-
プロセス通信メカニズム
- パイプ(パイプ):
パイプは半二重通信方式です。データは一方向にのみ流れることができ、関連するプロセス間でのみ使用できます。プロセスの親族関係は通常、親子プロセスの関係を指します。 - 名前付きパイプ(namedpipe):名前付きパイプ
も半二重通信方式ですが、無関係なプロセス間の通信を可能にします。 - セマフォ(セモフォア):
セマフォは、複数のプロセスによる共有リソースへのアクセスを制御するために使用できるカウンタです。これは、プロセスが共有リソースにアクセスしているときに、他のプロセスが共有リソースにアクセスするのを防ぐためのロックメカニズムとしてよく使用されます。したがって、主にプロセス間および同じプロセス内の異なるスレッド間の同期手段として使用されます。 - メッセージキュー(messagequeue):
メッセージキューはメッセージのリンクリストであり、カーネルに格納され、メッセージキュー識別子によって識別されます。メッセージキューは、信号送信情報が少ないという欠点を克服し、パイプラインはフォーマットされていないバイトストリームしか伝送できず、バッファサイズが制限されます。 - Signal(sinal):
Signalは、イベントが発生したことを受信プロセスに通知するために使用される、より複雑な通信方法です。 - 共有メモリ(共有メモリ):
共有メモリは、他のプロセスがアクセスできるメモリのセクションをマップするためのものです。この共有メモリは、1つのプロセスによって作成されますが、複数のプロセスからアクセスできます。共有メモリは最速のIPC方式であり、他のプロセス間通信方式の効率が低いために特別に設計されています。これは、プロセス間の同期と通信を実現するために、シグナル2などの他の通信メカニズムと組み合わせて使用されることがよくあります。 - ソケット(ソケット):
ソケットはプロセス間通信メカニズムでもあり、他の通信メカニズムとは異なり、異なるデバイスやプロセス間の通信に使用できます。
- パイプ(パイプ):