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

ざっくり言えば、プロセスは「作業場所」、スレッドは「そこで動く作業担当」です。1つのプロセスには最低1つのスレッドがあり、必要に応じて複数のスレッドが動きます。
まずプログラムとプロセスを分ける
ストレージに保存されているテキストエディタの実行ファイルは「プログラム」です。まだ起動していない段階では命令の集まりにすぎません。起動すると、OSがメモリ領域、識別番号、権限、開いているファイルなどをまとめた実行環境を作ります。これがプロセスです。
Microsoftの定義でも、プロセスは簡潔に「実行中のプログラム」、スレッドはOSがプロセッサ時間を割り当てる基本単位と説明されています。
テキストエディタで見るプロセスとスレッド
memo.txtを開いたテキストエディタを1つのプロセスとして考えます。説明を単純にするため、画面操作、入力処理、自動保存を別々のスレッドが担当する例にします。実際の分け方はアプリによって異なります。

プロセスが持つもの
プロセスには、専用の仮想アドレス空間、実行コード、OSオブジェクトへのハンドル、セキュリティ情報、プロセスIDなどがあります。別プロセスのメモリを通常の方法で自由に読み書きできないよう、OSが境界を作ります。
スレッドが持つもの・共有するもの
各スレッドは、どこまで命令を実行したかを表す状態や、自分用のスタックなどを持ちます。一方で、同じプロセスに属するスレッドは、そのプロセスのメモリや開いている資源を共有します。共有しやすい反面、同じデータを同時に変更すると競合が起きるため、同期が必要になります。
プロセスとスレッドの違いを表で整理
| 観点 | プロセス | スレッド |
|---|---|---|
| 意味 | 実行中のプログラムと資源のまとまり | プロセス内で命令を進める流れ |
| メモリ | 原則として別プロセスと分離 | 同じプロセスのメモリを共有 |
| 作成・切替 | 比較的重い | 一般にプロセスより軽い |
| データ共有 | 通信の仕組みが必要 | 共有メモリへ直接アクセスしやすい |
| 障害の影響 | 別プロセスへ広がりにくい | 同じプロセス全体へ影響しやすい |
並行と並列は同じではない
1つのCPUコアでも、OSが短い時間ごとにスレッドを切り替えると、複数処理が同時に進んでいるように見えます。これが並行実行の一例です。複数コアが別々のスレッドを本当に同時に実行できれば、並列実行になります。
ただし、スレッドを増やせば必ず速くなるわけではありません。共有データを守る待ち時間、スレッド切替、メモリやI/Oの競合が増えれば、かえって遅くなる場合があります。
タスクマネージャーでは主にプロセスを見る
Windowsのタスクマネージャーでアプリ別に並ぶ項目は、主にプロセスです。プロセスID(PID)、CPU使用率、メモリ使用量、開いているハンドル、スレッド数などをたどることで、どの実行環境が資源を使っているか確認できます。
アプリによっては、安定性や安全性のために1つのアプリ名でも複数プロセスを使います。ブラウザがタブや拡張機能を別プロセスへ分ける設計が代表例です。したがって「アプリ1つ=プロセス1つ」とは限りません。
JavaのThreadとRunnableへどうつながるか
JavaのThreadは、JVM上で実行の流れを扱うためのクラスです。OSレベルの概念を押さえたうえでJavaのThreadを読むと、start()が新しい実行の流れを始める意味が理解しやすくなります。
また、Runnableは「何を実行するか」を表し、Threadは「どの実行の流れで動かすか」に関係します。JVM内のメモリ構造はJavaのメモリ管理で深められます。
まとめ:プロセスとスレッドの違い
プロセスとスレッドの違いは、「資源の境界」と「実行の流れ」です。プロセスが作業場所を用意し、その内側で1本以上のスレッドがCPU時間を受け取りながら処理を進めます。
