📚

プロセスとスレッドの違いをRubyでの理解

に公開

プロセスとスレッドの違い

用語 説明
プロセス OSが管理する 独立した実行単位、メモリ空間も個別に持つ
スレッド プロセスの中で 並行処理 を行う小さな実行単位、メモリ空間は共有
  • プロセス は完全に独立した存在
  • スレッド はプロセスの中で動き、ヒープなどのメモリ空間を共有する

プロセスの内部構造

プロセス の内部は以下のセグメントで構成されています。

コードセグメント

  • プログラムの命令 が格納される領域
  • 実行する処理の本体がここにある

データセグメント

  • 静的なデータ(グローバル変数、定数、静的変数)が格納される領域

ヒープ

  • 動的に生成されるデータ(配列、オブジェクト、文字列)が格納される領域
  • 実行時にサイズが決まり、手動またはガベージコレクションで解放される

スタック

  • 一時的なデータ(ローカル変数、関数の引数、戻りアドレス)が格納される領域
  • 関数呼び出し毎に積まれ、終わると解放される
  • スレッド毎に専用

レジスタ

  • CPU内部のメモリ
  • 計算結果や処理中のデータを一時的に保持
  • スレッド毎に専用

イメージ図

[プロセス]
+-------------------------+
| コードセグメント       | ← プログラムの命令
+-------------------------+
| データセグメント       | ← 静的なデータ
+-------------------------+
| ヒープ                 | ← 動的メモリ(new されたオブジェクトなど)
+-------------------------+
| スレッド
| +---------------------+
| | スタック           | ← ローカル変数、引数
| +---------------------+
| | レジスタ           | ← 計算結果の一時保存
+-------------------------+

余談

マルチスレッドでは下記をスレッド間で共有しており
データの分割取得などの処理が可能になっている。

  • コードセグメント
  • データセグメント
  • ヒープ

Discussion