【ぷろせすとすれっど】

プロセスとスレッド とは?

最終更新:
💡 プロセスは「部屋」、スレッドは「部屋の中の作業者」

OSがプログラムを動かす際の単位。プロセスはメモリや資源を持つ実行環境で、スレッドはその中で処理を進める実行の流れ。

📌 このページのポイント
プロセスは環境、スレッドは実行の流れプロセスAスレッド1個別の実行状態・スタックスレッド2個別の実行状態・スタック共有データアドレス空間AプロセスBスレッド1個別の実行状態・スタックスレッド2個別の実行状態・スタック共有データアドレス空間B同じ部屋の共有データには同期が必要別の部屋でも、IPCや共有メモリで連携できる
Windowsの構成を簡略化。同じプロセス内では資源を共有する一方、各スレッドに個別の実行状態があります。プロセス間の共有メモリはこの図では省略。
ひよこ ひよこ
プロセスとスレッドの違いは?
ペンギン先生 ペンギン先生
プロセスはプログラムを動かすためのメモリや資源を持つ環境で、スレッドはその中で処理を進める流れだよ。Windowsでは各プロセスが仮想アドレス空間を持ち、スレッドがOSの実行スケジューリングの対象になる。1つのプロセスに複数のスレッドを置けるんだ。
ひよこ ひよこ
メモリは全部共有するの?
ペンギン先生 ペンギン先生
同じプロセスのスレッドはアドレス空間や資源を共有するけど、各スレッドのスタックやレジスタの状態などは別々だよ。別のプロセスは通常、別のアドレス空間を使う。ただし通信や共有メモリを明示的に用意して、データをやり取りすることはできるんだ。
ひよこ ひよこ
スレッドを増やすと速くなる?
ペンギン先生 ペンギン先生
処理を並列に進められる場合はあるけど、必ず速くなるわけではないよ。使えるCPUや処理の分け方、同期の待ち時間にもよるんだ。共有データを複数のスレッドが読み書きするなら、mutexなどで必要な同期を取ろう。プロセスを分けても通信や共有資源の影響は残るので、安全性も自動では決まらないよ。
ひよこ ひよこ
Chromeはタブごとに1プロセスなの?
ペンギン先生 ペンギン先生
常に1対1ではないよ。Chromiumの設計では、条件によって複数のタブが同じ描画プロセスを使うことも、1ページのフレームが別プロセスになることもある。プロセス分離は隔離に役立つけど、タブ数だけでプロセス数やメモリ消費を決められないんだ。
ひよこ ひよこ
非同期処理との違いは?
ペンギン先生 ペンギン先生
非同期は、処理の完了をその場で待ち続けずに進める方法。スレッド数とは別の話だよ。Node.jsではイベントループがJavaScriptのコールバックを実行し、一部の処理はワーカープールに任せる。全体が1スレッドだけで動くわけではなく、イベントループを長い処理で塞ぐとほかの処理も待たされるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「プロセスとスレッド」って出てきたら「実行環境の部屋と、その中で処理を進める作業者」と思えばだいたいOK!
📖 おまけ:英語の意味
「Process / Thread」 = 処理 / 糸
💬 Processはプログラムを動かす環境、Threadはその中を進む処理の流れとして捉えよう。1つのアプリが複数のプロセスを使うこともあるよ。

参考資料

← 用語集にもどる