ホームページ 運用・保守 安全性 スレッドとプロセスの関係は何ですか?

スレッドとプロセスの関係は何ですか?

May 22, 2023 pm 10:35 PM
プロセス

プロセスには少なくとも 1 つのスレッドが必要ですが、複数のスレッドを持つことができます。スレッドは 1 つのプロセスのアドレス空間内でのみ実行できます。 2. リソースはプロセスに割り当てられ、同じプロセスのすべてのスレッドがプロセスのすべてのリソースを共有します。 3. CPU はスレッドに割り当てられます。つまり、スレッドはプロセッサ上で実際に実行されます。同期を実現するには、実行スレッドが相互に連携する必要があり、プロセス間スレッドはメッセージ通信を使用する必要があります。

プロセスはリソース割り当ての基本単位であり、スレッドは CPU のスケジューリングとディスパッチの基本単位です。

スレッドはプロセスの一部です。スレッドは、プロセスにのみ属することができます。 1 つのプロセスに複数のスレッドを含めることができます。ただし、少なくとも 1 つのスレッドを持つことができます。

各プロセスには、独立したコードとデータ領域 (プログラム コンテキスト) があります。プログラム間の切り替えにはコストがかかります。スレッドは軽量プロセスとみなすことができます。同じタイプのスレッドはコードとデータ空間を共有します。各スレッドは独自の独立した実行スタックとプログラム カウンタ (PC) を持ちます。スレッド間の切り替えコストは小さいです。オペレーティング システムでは、複数のプロセス (プログラム) を 1 回で実行できます。同じプロセス (プログラム) 内の複数のスレッドが同時に実行されます (CPU スケジューリングにより、各タイム スライスで 1 つのスレッドのみが実行されます)

システムは実行時に各プロセスに異なるメモリ空間を割り当てます。 CPU に加えて、システムはスレッドにメモリを割り当てません (スレッドが使用するリソースは、スレッドが属するプロセスのリソースから取得されます)。また、スレッド グループはリソースのみを共有できます。

既存のプロセスは共有できません。シングルスレッドとみなされます。プロセス内に複数のスレッドがある場合、実行プロセスは 1 行ではなく、複数のスレッド (スレッド) が一緒に完了します。

スレッドはプロセスの一部であるため、スレッドは軽量プロセス/軽量と呼ばれます。プロセス



プロセスとスレッドの関係

1. プロセスは複数のスレッドを持つことができますが、少なくとも 1 つのスレッドがあり、スレッドはアドレス空間内の 1 つのプロセスアクティビティ内にあります。

2. リソースはプロセスに割り当てられ、同じプロセスのすべてのスレッドがプロセスのすべてのリソースを共有します。

3. CPU はスレッドに割り当てられます。つまり、スレッドはプロセッサ上で実際に実行されます。

4. スレッドは実行中に連携して同期する必要があり、異なるプロセスのスレッドは同期を達成するためにメッセージ通信を使用する必要があります。

プロセス間で何を共有できるでしょうか?

スレッドによって共有される環境には、プロセス コード セグメント、プロセスの公開データ (これらの共有データを使用すると、スレッドは相互に簡単に通信できます)、プロセスによって開かれるファイル記述子、およびシグナルが含まれます。プロセッサ、プロセスの現在のディレクトリ、プロセスのユーザー ID とプロセス グループ ID。

プロセスには多くの共通点がありますが、独自の個性もあります。これらの特性により、スレッドは同時実行性を実現できます。

1. スレッド ID

各スレッドには、このプロセス内で一意の独自のスレッド ID があります。プロセスはこれを使用してスレッドを識別します。

2. レジスタ グループ値

スレッドは同時に実行されるため、各スレッドには独自の異なる実行手がかりがあります。あるスレッドから別のスレッドに切り替えるとき、元のスレッドのレジスタの状態将来再びスレッドが切り替えられたときにスレッドを復元できるように、セットを保存する必要があります。

3. スレッド スタック

スタックは、スレッドが独立して実行されるようにするために必要です。 スレッド関数は関数を呼び出すことができ、呼び出される関数は階層ごとにネストできるため、関数呼び出しが他のスレッドの影響を受けずに正常に実行できるように、スレッドには独自の関数スタックが必要です。

4. エラーリターンコード

同じプロセス内で同時に多数のスレッドが動作しているため、システム構築後に特定のスレッドが errno 値を設定する可能性があります。このスレッドではこのエラーはまだ処理されておらず、この時点でスケジューラによって別のスレッドが実行されるため、エラー値が変更される可能性があります。
したがって、異なるスレッドには独自のエラー戻りコード変数が必要です。

5. スレッドのシグナル マスキング コード

各スレッドが関心のあるシグナルは異なるため、スレッドのシグナル マスキング コードはスレッド自体によって管理される必要があります。ただし、すべてのスレッドは同じシグナル ハンドラーを共有します。

6. スレッドの優先順位

スレッドはプロセスと同様にスケジュールする必要があるため、スケジュールに使用できるパラメーターが必要です。このパラメーターはスレッドの優先順位です。

プロセス間通信の 5 つの方法

1. (名前なし) パイプ

半二重、つまり同時ではありません 両方向でデータを転送します。一部のシステムは全二重をサポートする場合があります。

親プロセスと子プロセスの間のみ。従来の形式では、親プロセスがパイプを作成し、子プロセスをフォークすることで、親プロセスと子プロセスの間で使用できるようになります。

2. 名前付きパイプ (FIFO)

無関係なプロセスでもデータを交換できます。

3. メッセージ キュー

メッセージ キューは、メッセージのリンク リストに似た、カーネルに保存されているメッセージのリストです。ユーザー プロセスは、メッセージ キューにメッセージを追加したり、メッセージ キューからメッセージを読み取ることができます。

パイプライン通信と比較すると、メッセージ キューの利点は、メッセージごとに特定のメッセージ タイプを指定できることです。受信するときにキューの順序に従う必要はなく、カスタム条件に基づいて特定のタイプのメッセージを受信できます。

メッセージは、特定の形式と特定の優先度を持つレコードとして考えることができます。メッセージ キューに対する書き込み権限を持つプロセスは、特定のルールに従ってメッセージ キューに新しいメッセージを追加でき、メッセージ キューに対する読み取り権限を持つプロセスは、メッセージ キューからメッセージを読み取ることができます。

4. セマフォ

複数のプロセスが共有データにアクセスする必要がある場合、セマフォは主にこの目的で使用されるカウンターです。 2 つのプロセスが同じデータに同時にアクセスしないようにする必要がある場合は、セマフォを使用できます。

その主なプロセスは次のとおりです。

リソースを制御するセマフォを確認します。

セマフォの値が 0 より大きい場合、リソースは使用可能であり、リソースは減少します。 1 ずつ増加し、現在のセマフォが使用されていることを示します。

セマフォ値が 0 の場合、プロセスはセマフォ値が 0 より大きくなるまでスリープします。

つまり、実際には別のセマフォが提供されます。プロセスまたはプロセスの異なるスレッド間でのアクセス同期の手段

5. 共有メモリ

共有メモリにより、2 つ以上のプロセスが特定の記憶領域を共有できます。この記憶領域は 2 つ以上のプロセスで使用できます。プロセスは自身のアドレス空間にマッピングされており、あるプロセスが共有メモリに書き込んだ情報は、その共有メモリを利用する他のプロセスが簡単なメモリリードで読み出すことができ、プロセス間通信を実現します。

通信に共有メモリを使用する主な利点の 1 つは、プロセスがデータのコピーなしでメモリを直接読み書きできるため、効率が高いことです。パイプやメッセージ キューなどの通信方法の場合、カーネルは次のことを行う必要があります。データはユーザー空間に 4 回コピーされますが、共有メモリは 2 回だけコピーされます。1 回目は入力ファイルから共有メモリ領域に、もう 1 回目は共有メモリから出力ファイルにコピーされます。

一般に、プロセスがメモリを共有する場合、少量のデータの読み書き後に必ずしもマップが解除されるわけではなく、新しい通信があると共有メモリ領域が再確立され、代わりに共有領域が再構築されます。通信が完了するまでデータ内容は共有メモリに保持され、ファイルには書き戻されません。共有メモリの内容は通常、マッピングが解除されるときにファイルに書き戻されるため、通信に共有メモリを使用する方法は非常に効率的です。

6. ソケット:

ソケットもプロセス間通信メカニズムであり、他の通信メカニズムとは異なり、異なるコンピューター間で使用できます。

7. シグナル (信号)

シグナルは、イベントが発生したことを受信プロセスに通知するために使用される比較的複雑な通信方法です。

以上がスレッドとプロセスの関係は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Explorer.exe プロセスとは何かを説明する Explorer.exe プロセスとは何かを説明する Feb 18, 2024 pm 12:11 PM

Explorer.exe とは何のプロセスですか? Windows オペレーティング システムを使用しているときに、「explorer.exe」という用語をよく聞きますが、このプロセスが何であるか知りたいですか?この記事では、プロセスexplorer.exeとは何か、その機能と効果について詳しく説明します。まず、explorer.exe は Windows オペレーティング システムの重要なプロセスであり、Windows エクスプローラー (ウィンドウ) の管理と制御を担当します。

ccsvchst.exe はどのようなプロセスですか? ccsvchst.exe はどのようなプロセスですか? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe は、Symantec Endpoint Protection (SEP) ソフトウェアの一部である共通プロセス ファイルです。SEP は、有名なネットワーク セキュリティ会社 Symantec によって開発されたエンドポイント保護ソリューションです。ソフトウェアの一部として、ccsvchst.exe は SEP 関連のプロセスの管理と監視を担当します。まず、SymantecEndpointProtection(

Linux でゾンビプロセスを適切に強制終了する方法 Linux でゾンビプロセスを適切に強制終了する方法 Feb 19, 2024 am 10:40 AM

Linux システムでは、ゾンビ プロセスは終了したもののシステムにまだ残っている特別なプロセスです。ゾンビ プロセスは多くのリソースを消費しませんが、多すぎるとシステム リソースの枯渇を引き起こす可能性があります。この記事では、ゾンビ プロセスを正しく削除してシステムの正常な動作を保証する方法を紹介します。 1Linux ゾンビ プロセス 子プロセスがタスクを完了した後、親プロセスが時間内にステータスを確認しないと、子プロセスはゾンビ プロセスになります。子プロセスは親プロセスからの確認を待っており、システムは完了するまでリサイクルしません。そうしないと、ゾンビ プロセスがシステム内でハングし続けます。システム内にゾンビ プロセスがあるかどうかを確認するには、コマンド top を実行して、実行中のすべてのプロセスとゾンビ プロセスの可能性を表示します。 Linux における「top」コマンドの結果は、上の図から見ることができます。

Linuxのプロセス優先度調整方法を詳しく解説 Linuxのプロセス優先度調整方法を詳しく解説 Mar 15, 2024 am 08:39 AM

Linuxのプロセスの優先度調整方法を詳しく解説 Linuxシステムでは、プロセスの優先度によってプロセスの実行順序やシステム内のリソースの割り当てが決まります。プロセスの優先順位を合理的に調整すると、システムのパフォーマンスと効率が向上します。この記事では、Linuxでプロセスの優先度を調整する方法と具体的なコード例を詳しく紹介します。 1. プロセス優先度の概要 Linux システムでは、各プロセスには優先度が関連付けられています。優先順位の範囲は通常 -20 ~ 19 で、-20 は最高の優先順位を表し、19 は最高の優先順位を表します。

Windows 11 でタスク マネージャーのプロセス更新を停止し、タスクをより簡単に強制終了する方法 Windows 11 でタスク マネージャーのプロセス更新を停止し、タスクをより簡単に強制終了する方法 Aug 20, 2023 am 11:05 AM

Windows 11 および Windows 10 でタスク マネージャーのプロセス更新を一時停止する方法 CTRL + Window キー + Del キーを押してタスク マネージャーを開きます。デフォルトでは、タスク マネージャーは [プロセス] ウィンドウを開きます。ここでわかるように、すべてのアプリが際限なく動き回っており、選択するときにそれらを指すのが難しい場合があります。したがって、CTRL を押したままにすると、タスク マネージャーが一時停止されます。アプリを選択したり、下にスクロールしたりすることもできますが、常に CTRL ボタンを押し続ける必要があります。

Linux のプロセスがスリープするのはなぜですか? Linux のプロセスがスリープするのはなぜですか? Mar 20, 2024 pm 02:09 PM

Linux のプロセスがスリープするのはなぜですか? Linux オペレーティング システムでは、さまざまな理由や条件によりプロセスが休止状態になることがあります。プロセスが休止状態にあるときは、プロセスが一時的に中断され、特定の条件が満たされるまで実行を続行できないことを意味し、その後起動して実行を継続できます。次に、Linux でプロセスが休止状態に入るときの一般的な状況をいくつか詳しく紹介し、具体的なコード例で説明します。 I/O の完了を待機中: プロセスが I/O 操作 (読み取りなど) を開始したとき

C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? May 06, 2024 pm 05:27 PM

スレッドの枯渇を回避するには、公平なロックを使用してリソースの公平な割り当てを確保するか、スレッドの優先順位を設定します。優先順位の逆転を解決するには、リソースを保持しているスレッドの優先順位を一時的に高める優先順位の継承を使用するか、リソースを必要とするスレッドの優先順位を高めるロック プロモーションを使用します。

C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? May 06, 2024 pm 02:12 PM

C++ のスレッド終了およびキャンセル メカニズムには次のものがあります。 スレッド終了: std::thread::join() は、ターゲット スレッドが実行を完了するまで現在のスレッドをブロックします。 std::thread::detach() は、ターゲット スレッドをスレッド管理から切り離します。スレッドのキャンセル: std::thread::request_termination() はターゲット スレッドに実行の終了を要求します。 std::thread::get_id() はターゲット スレッド ID を取得し、std::terminate() とともに使用してターゲットを即座に終了できます。糸。実際の戦闘では、request_termination() によってスレッドが終了のタイミングを決定でき、join() によってメインラインでそれが保証されます。

See all articles