PR

【IT用語解説】プロセスとスレッドの違いとは?プログラムが動く単位を初心者向けに解説

プロセスとスレッドをコンピュータ基礎シリーズの統一デザインで表すアイキャッチ IT-Skills

プロセスは実行中のプログラムと、それに割り当てられたメモリや権限などのまとまりです。スレッドはそのプロセスの中で命令を進める実行の流れです。

ざっくり言えば、プロセスは「作業場所」、スレッドは「そこで動く作業担当」です。1つのプロセスには最低1つのスレッドがあり、必要に応じて複数のスレッドが動きます。

このページで学べる内容
  • プログラム・プロセス・スレッドの違い
  • 同じプロセス内で共有するもの
  • マルチプロセスとマルチスレッドの特徴
  • CPUコアと同時実行の関係
  • タスクマネージャーで何が見えるか
スポンサーリンク

まずプログラムとプロセスを分ける

ストレージに保存されているテキストエディタの実行ファイルは「プログラム」です。まだ起動していない段階では命令の集まりにすぎません。起動すると、OSがメモリ領域、識別番号、権限、開いているファイルなどをまとめた実行環境を作ります。これがプロセスです。

Microsoftの定義でも、プロセスは簡潔に「実行中のプログラム」、スレッドはOSがプロセッサ時間を割り当てる基本単位と説明されています。

テキストエディタで見るプロセスとスレッド

memo.txtを開いたテキストエディタを1つのプロセスとして考えます。説明を単純にするため、画面操作、入力処理、自動保存を別々のスレッドが担当する例にします。実際の分け方はアプリによって異なります。

テキストエディタの1つのプロセスがコード・メモリ・開いたmemo.txt・権限を持ち、その内部で画面、入力、自動保存の3スレッドが資源を共有して動く図
プロセスは資源の境界、スレッドはその内側で動く実行の流れです。同じプロセスのスレッドはメモリなどを共有します。

プロセスが持つもの

プロセスには、専用の仮想アドレス空間、実行コード、OSオブジェクトへのハンドル、セキュリティ情報、プロセスIDなどがあります。別プロセスのメモリを通常の方法で自由に読み書きできないよう、OSが境界を作ります。

スレッドが持つもの・共有するもの

各スレッドは、どこまで命令を実行したかを表す状態や、自分用のスタックなどを持ちます。一方で、同じプロセスに属するスレッドは、そのプロセスのメモリや開いている資源を共有します。共有しやすい反面、同じデータを同時に変更すると競合が起きるため、同期が必要になります。

プロセスとスレッドの違いを表で整理

観点 プロセス スレッド
意味 実行中のプログラムと資源のまとまり プロセス内で命令を進める流れ
メモリ 原則として別プロセスと分離 同じプロセスのメモリを共有
作成・切替 比較的重い 一般にプロセスより軽い
データ共有 通信の仕組みが必要 共有メモリへ直接アクセスしやすい
障害の影響 別プロセスへ広がりにくい 同じプロセス全体へ影響しやすい

「プロセスは安全、スレッドは危険」という意味ではありません。隔離の強さ、共有のしやすさ、作成や切替のコストのバランスが違います。

並行と並列は同じではない

1つのCPUコアでも、OSが短い時間ごとにスレッドを切り替えると、複数処理が同時に進んでいるように見えます。これが並行実行の一例です。複数コアが別々のスレッドを本当に同時に実行できれば、並列実行になります。

ただし、スレッドを増やせば必ず速くなるわけではありません。共有データを守る待ち時間、スレッド切替、メモリやI/Oの競合が増えれば、かえって遅くなる場合があります。

注意。 「画面が固まらないように別スレッドへ移す」設計でも、共有データの更新や画面描画にはルールがあります。実装する言語やGUIフレームワークの制約を確認します。

タスクマネージャーでは主にプロセスを見る

Windowsのタスクマネージャーでアプリ別に並ぶ項目は、主にプロセスです。プロセスID(PID)、CPU使用率、メモリ使用量、開いているハンドル、スレッド数などをたどることで、どの実行環境が資源を使っているか確認できます。

アプリによっては、安定性や安全性のために1つのアプリ名でも複数プロセスを使います。ブラウザがタブや拡張機能を別プロセスへ分ける設計が代表例です。したがって「アプリ1つ=プロセス1つ」とは限りません。

JavaのThreadとRunnableへどうつながるか

JavaのThreadは、JVM上で実行の流れを扱うためのクラスです。OSレベルの概念を押さえたうえでJavaのThreadを読むと、start()が新しい実行の流れを始める意味が理解しやすくなります。

また、Runnableは「何を実行するか」を表し、Threadは「どの実行の流れで動かすか」に関係します。JVM内のメモリ構造はJavaのメモリ管理で深められます。

まとめ:プロセスとスレッドの違い

  • プログラムは保存された命令、プロセスはそれを実行中にした環境
  • スレッドはOSがCPU時間を割り当てる実行の流れ
  • 同一プロセスのスレッドはメモリや資源を共有する
  • プロセス分離は障害を囲いやすく、スレッド共有は連携しやすい
  • 複数スレッドがあっても、常に並列で速くなるとは限らない

プロセスとスレッドの違いは、「資源の境界」と「実行の流れ」です。プロセスが作業場所を用意し、その内側で1本以上のスレッドがCPU時間を受け取りながら処理を進めます。

タイトルとURLをコピーしました