ひとことで言うと
プロセスは、OSが管理する「実行中のプログラム」の単位で、それぞれ独立したメモリ空間と資源(CPU・ファイルなど)を持ちます。
同じプログラムを2つ起動すれば、2つのプロセスが生まれます。 それぞれは独立しているため、片方がクラッシュしてももう片方は影響を受けません。 OSはこのプロセスを切り替えながら、複数の処理を並行して進めています。
たとえ話でもう少し詳しく
プロセスは、工場の作業台に近いです。
- 同じ図面(プログラム)を使っても、作業台ごとに独立して仕事ができる
- それぞれの台に専用の材料と道具(メモリと資源)が用意されている
- 1台の作業台で問題が起きても、他の台の作業には影響しない
OSはこの「作業台の割り振り」を管理しています。 CPUは1度に1つのプロセスしか処理できませんが、ミリ秒単位で高速に切り替えることで、複数のプログラムが「同時に動いている」ように見せています。
スレッドとの関係
プロセスの中に「スレッド」という細かい実行単位があります。
- プロセス:独立した実行環境(メモリを共有しない)
- スレッド:同じプロセス内で並行して動く実行の流れ(メモリを共有する)
Webブラウザを例にすると、ブラウザ全体が1つのプロセスで、タブごとの処理や描画がスレッドとして動いているイメージです。 スレッドは軽量で切り替えが速い反面、メモリを共有するため1つのスレッドのバグが他に影響することがあります。
よく出る場面・使いどころ
- WebサーバーがHTTPリクエストを受け取るたびにプロセス(またはスレッド)を生成して対応するとき
- アプリがクラッシュしても再起動できるようプロセス監視を仕組みとして用意するとき
- 複数のCPUコアを使って処理を高速化するとき(マルチプロセス・マルチスレッド)
- コンテナ技術でアプリをプロセスとして隔離して動かすとき
似た言葉との違い
- オペレーティングシステム(OS)
- プロセスの生成・管理・終了を担うソフトウェア
- OSがなければプロセスは動かせない
- コンテナ
- プロセスを隔離された環境にまとめて動かす仕組み
- コンテナの中では1つまたは複数のプロセスが動いている
- プログラム
- ディスクに保存された命令の集まり
- プログラムを実行したものがプロセス。レシピ(プログラム)と料理中の作業(プロセス)の関係に近い
実務で気にするポイント
- プロセスが増えすぎるとメモリ・CPUを消費し、サーバーの性能が落ちる
- プロセスの数を上限で管理して、負荷が高くなりすぎないよう設計する
- クラッシュしたプロセスを自動で再起動する仕組みをセットで用意する
- ゾンビプロセス(終了したのに片付けられていないプロセス)が溜まると資源が無駄になる
注意: 「プロセスを増やせばスケールする」とは限りません。データベースへの接続数やファイルハンドルなど、1台のサーバーで持てる資源には上限があります。プロセス数の設計はサーバーの資源全体を見て行います。