プロセスとスレッドの違いとは?IT初心者向けにわかりやすく解説
プロセスは実行中のプログラム全体、スレッドはプロセス内で処理を実行する単位です。
1つのアプリケーションを起動すると、Windows上では通常1つ以上のプロセスが作成されます。そのプロセスの中で、画面表示、ファイル読み込み、通信などを担当する複数のスレッドが動作します。
社内SE、ヘルプデスク、運用保守の業務では、アプリケーションの応答停止、CPU使用率の上昇、サーバー処理の遅延を調査するときに必要となる基礎知識です。
- プロセスとスレッドの違い
- プロセスとは何か
- スレッドとは何か
- プロセスとスレッドの関係
- 身近な例で考えるプロセスとスレッド
- メモリの使い方の違い
- マルチプロセスとマルチスレッドの違い
- IT現場で使われる場面
- Windows 11のGUIで確認する方法
- コマンドプロンプトで確認する方法
- PowerShellで確認する方法
- 確認結果の見方
- プロセスが応答しないときの確認順序
- 原因の切り分け方
- 業務でよくあるトラブル
- イベントビューアーの確認方法
- ログを確認するときのポイント
- 初心者がやりがちなミス
- 筆者が現場で経験した失敗例
- 上司へ報告するポイント
- エスカレーションするタイミング
- 新人が覚えておくべきポイント
- 応用知識
- 関連するIT用語
- よくある質問
- まとめ
プロセスとスレッドの違い
| 項目 | プロセス | スレッド |
|---|---|---|
| 簡単な意味 | 実行中のプログラム全体 | プロセス内で動く処理の単位 |
| 関係 | 1つ以上のスレッドを持つ | 必ずいずれかのプロセスに属する |
| メモリ | 基本的にプロセスごとに分離される | 同じプロセス内でメモリを共有する |
| 影響範囲 | 終了すると内部のスレッドも終了する | 異常がプロセス全体へ影響する場合がある |
| 作成時の負荷 | 比較的大きい | プロセスより小さい |
| Windowsでの確認 | タスクマネージャーやGet-Process | 詳細タブ、リソースモニター、PowerShell |
プロセスを会社、スレッドをその会社で作業する担当者に例えると理解しやすくなります。
プロセスとは何か
プロセスとは、OS上で実行されているプログラムの実体です。OSはOperating Systemの略で、Windows 11など、コンピューター全体を管理する基本ソフトウェアを指します。
例えば、メモ帳を起動すると、Windowsはメモ帳を動かすためのプロセスを作成します。Webブラウザー、Excel、Teamsなども、起動中はそれぞれプロセスとして管理されます。
プロセスには主に次の情報があります。
- プロセス名
- PID(Process ID)
- 使用しているメモリ
- CPU使用率
- 実行ユーザー
- 起動した日時
- 内部で動作するスレッド
PIDは、実行中のプロセスを識別するための番号です。同じ名前のプロセスが複数起動していても、PIDはそれぞれ異なります。
スレッドとは何か
スレッドとは、プロセス内で実際に命令を実行する処理単位です。
1つのプロセスには、最低でも1つのスレッドがあります。複数の処理を効率よく進めるアプリケーションでは、多数のスレッドが同時に動作します。
例えば、Webブラウザーでは次のような処理が並行して行われます。
- 画面を表示する
- Webサーバーと通信する
- 画像を読み込む
- 動画や音声を再生する
- ユーザーのマウス操作を受け付ける
これらを1つの処理だけで順番に行うと、画面が固まりやすくなります。複数のスレッドへ処理を分けることで、利用者の操作を受け付けながら裏側の処理を進められます。
プロセスとスレッドの関係
プロセスは、実行に必要なメモリや資源を持つ入れ物です。スレッドは、その入れ物の中で動く作業担当です。
- ユーザーがアプリケーションを起動する
- Windowsがプロセスを作成する
- プロセス内にメインスレッドが作成される
- 必要に応じて追加のスレッドが作成される
- 各スレッドが処理を実行する
- プロセスを終了すると所属するスレッドも終了する
スレッドだけが単独でアプリケーションとして動くことはありません。必ずプロセスの中に存在します。
身近な例で考えるプロセスとスレッド
会社と社員の例
- 会社がプロセス
- 社員がスレッド
- 会社の設備や書類が共有メモリ
- 社員ごとの作業が個別の処理
同じ会社の社員は設備や情報を共有しながら、別々の仕事を進めます。スレッドも同じプロセスのメモリを共有しながら、それぞれの処理を実行します。
レストランの例
レストラン全体をプロセス、調理、配膳、会計を担当するスタッフをスレッドと考えられます。
スタッフが複数いれば、料理を作りながら別のお客様の会計を進められます。ただし、共有している注文情報に間違いが起きると、店全体の業務へ影響する可能性があります。
メモリの使い方の違い
プロセスとスレッドの大きな違いは、メモリの扱いです。
異なるプロセスは、基本的にそれぞれ独立したメモリ領域を使います。そのため、1つのプロセスで障害が発生しても、別のプロセスへ直接影響しにくい構造です。
一方、同じプロセス内のスレッドはメモリを共有します。データを受け渡しやすい反面、1つのスレッドが共有データを誤って変更すると、別のスレッドやプロセス全体に障害が広がることがあります。
| 構成 | 長所 | 注意点 |
|---|---|---|
| 複数プロセス | 障害を分離しやすい | メモリ消費や作成負荷が大きい |
| 複数スレッド | 軽量でデータ共有が速い | 共有データの競合に注意が必要 |
マルチプロセスとマルチスレッドの違い
マルチプロセス
複数のプロセスを同時に動かして処理する方式です。各プロセスが比較的独立しているため、1つが異常終了してもほかへ影響しにくい特徴があります。
Webブラウザーでは、タブや機能ごとに複数のプロセスを使う設計が採用されることがあります。
マルチスレッド
1つのプロセス内で複数のスレッドを動かす方式です。メモリを共有できるため高速ですが、同じデータを同時に変更しないよう制御が必要です。
ファイルの読み込み中も画面操作を受け付けるアプリケーションなどで利用されます。
IT現場で使われる場面
- アプリケーションが応答しない原因を調べる
- CPU使用率が高いプロセスを特定する
- サーバーの負荷を調査する
- サービスが正常に起動しているか確認する
- 不審なプロセスを調査する
- プログラムの性能問題を開発担当者へ報告する
- メモリ使用量が増え続ける原因を調べる
運用担当者がプログラムを修正しない場合でも、プロセス名、PID、CPU、メモリ、スレッド数を記録できると、開発担当者への報告精度が上がります。
Windows 11のGUIで確認する方法
タスクマネージャーでプロセスを確認する
- Ctrl+Shift+Escキーを押す
- 必要に応じて「詳細」を選択する
- 「プロセス」タブを開く
- CPU、メモリ、ディスク、ネットワークを確認する
- 詳細な情報が必要な場合は「詳細」タブを開く
タスクマネージャーでは、どのアプリケーションがCPUやメモリを多く使用しているか確認できます。
スレッド数を表示する
- タスクマネージャーの「詳細」タブを開く
- 列名の部分を右クリックする
- 「列の選択」を開く
- 「スレッド」を有効にする
- 各プロセスのスレッド数を確認する
スレッド数が多いだけで異常とは限りません。通常時と比較して急増しているか、CPU使用率や応答停止を伴っているかを確認することが重要です。
リソースモニターを開く
WindowsキーとRキーを押し、resmonと入力してEnterキーを押します。
リソースモニターでは、CPU、メモリ、ディスク、ネットワークの利用状況をプロセス単位で確認できます。
コマンドプロンプトで確認する方法
実行中のプロセスを一覧表示する
tasklist
プロセス名、PID、メモリ使用量などを確認できます。
特定のプロセスを検索する
tasklist | findstr notepad
例では、プロセス名にnotepadを含む行を絞り込みます。
プロセスを終了する
taskkill /PID 1234
1234の部分には対象プロセスのPIDを指定します。
未保存データが失われる可能性があるため、強制終了は利用者へ確認してから実施してください。
PowerShellで確認する方法
プロセス一覧を表示する
Get-Process
実行中のプロセスをオブジェクトとして取得できます。
CPU使用量が多い順に並べる
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU, WorkingSet
Nameはプロセス名、IdはPID、CPUは使用したCPU時間、WorkingSetは物理メモリの使用量です。
スレッド数を確認する
Get-Process | Select-Object Name, Id, @{Name=”ThreadCount”;Expression={$_.Threads.Count}}
各プロセスのスレッド数を一覧で確認できます。
特定のPIDを確認する
Get-Process -Id 1234
対象PIDのプロセス情報を取得します。
確認結果の見方
| 確認項目 | 見方 |
|---|---|
| CPU使用率 | 長時間高い状態が続いているか確認する |
| メモリ使用量 | 時間とともに増え続けていないか確認する |
| PID | 同名プロセスを区別するときに使う |
| スレッド数 | 通常時より急増していないか比較する |
| 応答状態 | 「応答なし」になっていないか確認する |
| 実行ユーザー | 想定したアカウントで動いているか確認する |
一時的なCPU上昇やスレッド増加は、必ずしも障害ではありません。通常時の値、発生時刻、業務影響を合わせて判断します。
プロセスが応答しないときの確認順序
- 影響を受けている利用者数を確認する
- 特定の端末だけか、複数端末で発生しているか調べる
- 対象アプリケーションのプロセス名とPIDを確認する
- CPUとメモリの使用量を確認する
- ディスクやネットワークの負荷を調べる
- スレッド数が急増していないか確認する
- イベントビューアーとアプリケーションログを確認する
- 未保存データの有無を確認する
- 必要に応じてアプリケーションを再起動する
最初からプロセスを強制終了すると、原因調査に必要な情報や利用者の未保存データを失う場合があります。
原因の切り分け方
| 切り分け対象 | 確認内容 |
|---|---|
| ユーザー側 | 特定操作だけで発生するか、未保存データがあるか |
| Windows側 | CPU、メモリ、更新履歴、イベントログ |
| アプリ側 | プロセスの応答状態、バージョン、アプリログ |
| ネットワーク側 | 通信待ち、名前解決、接続先サーバーの状態 |
| サーバー側 | 同時接続数、サービス状態、負荷、障害情報 |
| 権限 | 実行ユーザー、サービスアカウント、アクセス権 |
1人だけで発生する場合は端末やユーザープロファイル、全員で発生する場合はサーバーやネットワーク側の可能性が高くなります。
業務でよくあるトラブル
プロセスのCPU使用率が高い
大量データの処理、無限ループ、通信の再試行、ウイルス対策ソフトのスキャンなどが原因として考えられます。
一時的な上昇か、長時間継続しているかを確認しましょう。
メモリ使用量が増え続ける
不要になったメモリが解放されないメモリリークの可能性があります。再起動で一時的に改善しても再発する場合は、開発担当者や製品サポートへの確認が必要です。
スレッド数が増え続ける
処理終了後もスレッドが残っている、通信処理が終了できないなどの可能性があります。通常時との比較が重要です。
アプリケーションが応答なしになる
画面を担当するスレッドが、長時間かかる処理や通信待ちで止まっている可能性があります。
同じ名前のプロセスが複数ある
ブラウザーなどでは正常な場合があります。プロセス名だけで判断せず、PID、実行パス、利用者、CPU使用率を確認します。
イベントビューアーの確認方法
- WindowsキーとRキーを押す
- eventvwr.mscと入力する
- Enterキーを押す
- 「Windowsログ」を開く
- 「アプリケーション」と「システム」を確認する
- 障害が発生した時刻付近のエラーを探す
アプリケーションの異常終了では、Application ErrorやWindows Error Reportingに関する記録が残ることがあります。
次の情報を控えてください。
- イベントID
- 発生日時
- 障害が発生したアプリケーション名
- 障害モジュール名
- 例外コード
- イベントの詳細内容
ログを確認するときのポイント
対象アプリケーションに独自ログがある場合は、イベントビューアーだけでなくアプリケーションログも確認します。
- 処理開始時刻と終了時刻
- エラーが発生した機能
- 通信先のサーバー名
- タイムアウトの有無
- 対象ユーザー
- プロセスIDやスレッドID
- エラーコード
ログにスレッドIDが記録されている場合、どの処理単位で問題が起きたかを開発担当者が追跡しやすくなります。
初心者がやりがちなミス
- プロセスとアプリケーションを常に1対1だと思う
- CPU使用率が一瞬高いだけで障害と判断する
- 同名プロセスをPIDで区別しない
- スレッド数が多いだけで異常と決めつける
- 未保存データを確認せず強制終了する
- イベントログを保存せず再起動する
- 利用者側だけを確認し、サーバー側を調べない
筆者が現場で経験した失敗例
業務アプリケーションが固まった際、タスクマネージャーで同じ名前のプロセスが複数表示されていたため、CPU使用率だけを見て1つを終了したことがあります。
しかし、終了したのは障害対象ではなく、別の利用機能を担当するプロセスでした。利用者の別画面まで閉じてしまい、未保存の入力内容を失わせる結果となりました。
それ以降は、プロセス名だけではなく、PID、起動時刻、実行ユーザー、対象画面との関係を確認してから対応しています。現場では、正しいプロセスを特定してから操作することが非常に重要です。
上司へ報告するポイント
- 障害の発生日時
- 対象アプリケーション名
- 端末名やサーバー名
- 影響を受けている利用者数
- プロセス名とPID
- CPU、メモリ、スレッド数
- 応答なしの有無
- イベントIDとエラー内容
- 再現手順
- 実施済みの確認と対応
「アプリが重い」だけでは情報が不足します。数値、時刻、影響範囲、通常時との差を含めると、上位担当者が判断しやすくなります。
エスカレーションするタイミング
- 複数ユーザーや複数端末で同時に発生している
- 重要なサーバープロセスやサービスに異常がある
- CPUやメモリの高負荷が長時間続いている
- プロセスを再起動しても繰り返し再発する
- スレッド数やメモリ使用量が増え続けている
- 業務データの破損や消失が疑われる
- 本番サーバーの再起動や強制終了が必要になる
本番サーバー上のプロセスを停止すると、複数の利用者へ影響する場合があります。必ず運用手順、承認ルール、保守担当者への連絡方法を確認してください。
新人が覚えておくべきポイント
- プロセスは実行中のプログラム全体
- スレッドはプロセス内の処理単位
- 1つのプロセスには1つ以上のスレッドがある
- 同じプロセス内のスレッドはメモリを共有する
- プロセスはPIDで識別する
- 一時的な高負荷と継続的な異常を区別する
- 強制終了の前にログと未保存データを確認する
応用知識
コンテキストスイッチ
CPUが実行するスレッドを切り替える処理をコンテキストスイッチと呼びます。
スレッドが多すぎると切り替え処理が増え、かえって性能が低下する場合があります。
デッドロック
複数のスレッドがお互いの処理完了を待ち続け、先へ進めなくなる状態です。アプリケーションが応答しない原因の1つです。
競合状態
複数のスレッドが同じデータを同時に変更し、実行する順番によって結果が変わる問題です。英語ではRace Conditionと呼ばれます。
サービスとプロセスの違い
Windowsサービスは、画面を表示せずバックグラウンドで動作する仕組みです。サービスを開始すると、その処理を担当するプロセスが起動します。
1つのプロセス内で複数のサービスが動作する場合もあるため、サービスとプロセスは必ずしも1対1ではありません。
関連するIT用語
- CPU
- メモリ
- PID(Process ID)
- マルチプロセス
- マルチスレッド
- コンテキストスイッチ
- デッドロック
- 競合状態
- Windowsサービス
- タスクマネージャー
よくある質問
1つのプロセスにスレッドはいくつありますか?
最低でも1つあります。アプリケーションによっては、数十から数百のスレッドが動作する場合もあります。
スレッドが多いほど処理は速くなりますか?
必ずしも速くなりません。CPUの性能や処理内容によっては、スレッド切り替えの負荷が増えて遅くなることがあります。
プロセスを終了するとスレッドはどうなりますか?
そのプロセスに属するスレッドも終了します。未保存データや実行中の処理が失われる可能性があります。
同じアプリなのにプロセスが複数あるのは異常ですか?
異常とは限りません。ブラウザーやTeamsなどは、安定性や安全性を高めるために複数プロセスで動くことがあります。
CPU使用率が高いプロセスは終了してよいですか?
すぐに終了してはいけません。対象プロセスの役割、業務影響、未保存データ、サーバー上の重要処理かどうかを確認してから判断します。
プロセスとプログラムは同じですか?
同じではありません。プログラムは保存されている命令の集合で、プロセスはそのプログラムが実際に実行されている状態です。
まとめ
プロセスとスレッドは、Windowsやアプリケーションの動作を理解するための重要な基礎用語です。
- プロセスは実行中のプログラム全体
- スレッドはプロセス内で実行される処理単位
- 1つのプロセスには1つ以上のスレッドが存在する
- プロセス間のメモリは基本的に分離される
- 同じプロセス内のスレッドはメモリを共有する
- 障害調査ではPID、CPU、メモリ、スレッド数を確認する
初心者は、「プロセスは会社、スレッドは会社の中で働く担当者」と覚えると理解しやすくなります。トラブル対応では、数値だけで異常と判断せず、影響範囲、通常時との差、イベントログを確認してから対応することが大切です。
