スレッドは、プロセス内でスケジュールされる実行の流れです。実行中の各プロセスには少なくとも一つのスレッドがあり、マルチスレッドプロセスには並行して進行できる複数の流れがあります。
プロセス利用率 · レッスン 3
プロセススレッド
Linux のスレッドがプロセス資源を共有する仕組みと、ps で調べる方法を学びます。
プロセスとスレッド
一つのプロセス内のスレッドは、仮想アドレス空間や開いているファイル記述子などの資源を共有します。各スレッドは、それでもレジスターやスタックを含む固有の実行状態を持ちます。共有により効率的に通信できますが、同期されていない一つのスレッドの変更がほかへ影響することも意味します。
別々のプロセスは通常、異なるアドレス空間を持ち、明示的なプロセス間通信機構を通じて通信します。どちらの設計が自動的に高速または安全ということはなく、ワークロードと実装によってトレードオフが決まります。
同じプロセス内のスレッドが通常共有する資源はどれですか?
スレッド識別子
Linux は各スレッドを、固有のスレッド ID を持つスケジュール可能なタスクとして表します。スレッドグループリーダーの ID は一般にプロセス ID として表示され、全メンバーが一つのスレッドグループ ID を共有します。ツールは PID、TID、LWP、SPID などのラベルを使うため、すべて同じ意味だと考えず、各ツールのフィールド定義を確認してください。
各スレッドが独立して維持するものは何ですか?
ps でスレッドを一覧表示する
曖昧な既定レイアウトを避けるため、出力フィールドを明示します。
$ ps -eLo pid,tid,psr,stat,comm
procps の ps では、-L がスレッドを表示し、-e が全プロセスを選択します。pid はスレッドグループ、tid は個々のスレッド、psr は最後に実行された CPU、stat は状態を示します。一つのプロセスを調べるには次を使います。
$ ps -L -p 1234 -o pid,tid,stat,pcpu,comm
スレッド一覧はスナップショットです。直後にスレッドが終了したり状態を変えたりする場合があります。
PID 1234 に属するスレッドを明示的なフィールドで一覧表示するコマンドはどれですか?
スレッドの活動を解釈する
一つのスレッドの高い CPU 使用率が、プロセス全体の平均に隠れる場合があります。スレッド単位の CPU サンプルを、アプリケーションログ、スタックトレース、プロファイリングツールと組み合わせてください。停止、権限、サービスへの影響を理解せず、本番タスクへデバッガーを接続したりシグナルを送ったりしてはいけません。
ps のスレッド一覧を永続的な状態として扱うべきでないのはなぜですか?
レッスン完了
プロセススレッド を完了しました
プロセス資源とスレッド固有の実行状態を区別できるようになりました。
すべてのプロセスに少なくとも一つのスレッドがあると理解する。
一つのプロセス内でスレッドが共有する資源を識別する。
ps -Lでプロセス ID とスレッド ID を明示して一覧表示する。スレッド出力をスナップショットとして扱い、ほかの証拠と照合する。