📚
プロセスとスレッドの違いをRubyでの理解
プロセスとスレッドの違い
用語 | 説明 |
---|---|
プロセス | OSが管理する 独立した実行単位、メモリ空間も個別に持つ |
スレッド | プロセスの中で 並行処理 を行う小さな実行単位、メモリ空間は共有 |
- プロセス は完全に独立した存在
- スレッド はプロセスの中で動き、ヒープなどのメモリ空間を共有する
プロセスの内部構造
プロセス の内部は以下のセグメントで構成されています。
コードセグメント
- プログラムの命令 が格納される領域
- 実行する処理の本体がここにある
データセグメント
- 静的なデータ(グローバル変数、定数、静的変数)が格納される領域
ヒープ
- 動的に生成されるデータ(配列、オブジェクト、文字列)が格納される領域
- 実行時にサイズが決まり、手動またはガベージコレクションで解放される
スタック
- 一時的なデータ(ローカル変数、関数の引数、戻りアドレス)が格納される領域
- 関数呼び出し毎に積まれ、終わると解放される
- スレッド毎に専用
レジスタ
- CPU内部のメモリ
- 計算結果や処理中のデータを一時的に保持
- スレッド毎に専用
イメージ図
[プロセス]
+-------------------------+
| コードセグメント | ← プログラムの命令
+-------------------------+
| データセグメント | ← 静的なデータ
+-------------------------+
| ヒープ | ← 動的メモリ(new されたオブジェクトなど)
+-------------------------+
| スレッド
| +---------------------+
| | スタック | ← ローカル変数、引数
| +---------------------+
| | レジスタ | ← 計算結果の一時保存
+-------------------------+
余談
マルチスレッドでは下記をスレッド間で共有しており
データの分割取得などの処理が可能になっている。
- コードセグメント
- データセグメント
- ヒープ
Discussion