Linux では、スレッドとはプログラム内の実行ルート、つまりプロセス内の制御シーケンスを指し、すべてのプロセスには少なくとも 1 つの実行スレッドがあります。スレッドはプログラム実行の最小単位であり、スレッドはプロセス データを共有しますが、独自のデータ部分も持ちます。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux スレッドの概念
スレッドとは何ですか?
- #プログラム内の実行ルートをスレッドと呼びます。より正確な定義は、スレッドは「プロセス内の制御シーケンス」です。
- すべてのプロセスには少なくとも 1 つの実行スレッドがあります。
プロセスとスレッド
- プロセスは、リソース割り当てと競争の基本単位です
- スレッドはプログラム実行の最小単位です。
- スレッドはプロセス データを共有しますが、独自のデータ部分も持ちます。
- スレッド ID
- レジスタのセット: IP、 PSW、スタック ポインタ
- スタック
- エラー番号
- 信号ステータス
- 優先度
# フォークと新しいスレッドの作成の違い
プロセスがフォーク呼び出しを実行すると、プロセスの新しいコピーが作成されます。プロセスには独自の変数と独自の PID があります。この新しいプロセスのランタイムは独立しており、プロセスを作成したプロセスからほぼ完全に独立して実行されます。 - プロセス内に新しいスレッドを作成すると、新しい実行プロセスは独自のスタック (したがって独自のローカル変数) を持ちますが、グローバル変数とファイル記述子はその作成者と共有します。現在の作業ディレクトリのステータス。
-
スレッドの利点
新しいスレッドを作成するコストは、新しいプロセスを作成するよりもはるかに小さくなります- プロセス間の切り替えと比較して、スレッド間の切り替えに必要なオペレーティング システムの作業量ははるかに少なくなります。
- スレッドが占有するリソースはプロセスよりもはるかに少なくなります。
- スレッド間の並列数を最大限に活用できます。マルチプロセッサ
- 遅い I/O 操作が終了するのを待っている間、プログラムは他のコンピューティング タスクを実行できます
- コンピューティング集約型アプリケーションを実行して、マルチプロセッシングを実行できるようにします。サーバー システムでは、計算が複数のスレッドに分解され、
- I/O 集中型のアプリケーションが実装されます。システムを改善するために、I/O 操作が重複します。スレッドは同時に異なる I/O 操作を待機できる
-
スレッドの欠点
パフォーマンスの損失- 外部イベントによってめったにブロックされない計算集約型のスレッドは、多くの場合、同じプロセッサを他のスレッドと共有できません。計算負荷の高いスレッドの数が利用可能なプロセッサを超える場合、大幅なパフォーマンスの低下が発生する可能性があります。パフォーマンスの低下とは、利用可能なリソースが変化しないにもかかわらず、追加の同期とスケジューリングのオーバーヘッドが追加されることを指します。
- 堅牢性の低下
- マルチスレッドの作成には、より包括的かつ詳細な考慮が必要です。マルチスレッド プログラムでは、時間の割り当てや変数の共有におけるわずかなずれにより、エラーが発生する可能性があります。共有されない、悪さを引き起こす可能性が非常に高い、つまりスレッド間の保護が不足しています。
- アクセス制御の欠如
- プロセスはアクセス制御の基本的な粒度であり、スレッド内で特定の OS 関数を呼び出すと、プロセス全体に影響します。
- プログラミングの難易度の上昇
- マルチスレッド プログラムの作成とデバッグは、シングルスレッド プログラムよりもはるかに困難です
-
スレッド スケジューリング競合範囲
オペレーティング システムは、アプリケーションによって作成されたスレッドをスケジュールするためのさまざまなモデルを提供します。これらのモデル間の時間の主な違いは次のとおりです。システム リソース (特に CPU 時間) を競合する場合、スレッド スケジュールの競合スコープが異なります。- プロセス競合スコープ: 各スレッドで「スケジュールされた CPU 時間」を競合します。同じプロセス (ただし、他のプロセスのスレッドとは直接ではありません)。
- システム競合スコープ: スレッドは、「システム スコープ」内の他のスレッドと直接競合します。
-
関連する推奨事項: 「
Linux ビデオ チュートリアル 」
以上がLinuxのスレッドとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。