プロセスとスレッド

プロセスとスレッド

執筆済 コンピュータ並行処理

並行処理の実行単位。 プロセススレッドも参照。

選び方#

プロセス スレッド
メモリ 独立 共有
障害の波及 しない プロセス全体が落ちる
通信コスト 高い(IPC) ほぼゼロ
生成コスト 高い 低い
デバッグ しやすい 難しい

隔離を取るか、通信の速さを取るかの選択。

プロセス間通信 (IPC)#

手段 特徴
パイプ 単方向、親子間
名前付きパイプ 無関係なプロセス間
共有メモリ 速いが同期が要る
メッセージキュー 構造化された送受信
ソケット ネットワーク越しも可
シグナル 非同期の通知。単純な用途のみ

軽量スレッド#

OS スレッドは 1 本あたり スタックを 1〜8 MB 予約するため、数万本は現実的でない。

実装 名称
Go goroutine(初期スタック 2 KB、伸縮する)
Java 21+ 仮想スレッド
Erlang プロセス(言語レベル、極めて軽い)
Rust、Python async タスク

いずれもランタイムが多数の軽量スレッドを 少数の OS スレッドに載せる(M:N)。 I/O で待つ間に他へ切り替えることで、 少ないカーネル資源で高い並行度を得る。

プロセス分離の実例#

Chrome はタブごとにプロセスを分ける。 メモリを多く使うが、 1 タブのクラッシュやセキュリティ侵害が 他に波及しない。

信頼できないコードを扱うなら、隔離のコストは正当化される。

参考文献#

  • Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces. Arpaci-Dusseau Books, 2018.(全文公開) https://pages.cs.wisc.edu/~remzi/OSTEP/
  • Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming, 2nd ed. Morgan Kaufmann, 2020.
  • Charles Reis, Steven D. Gribble. Isolating Web Programs in Modern Browser Architectures. EuroSys, 2009. https://doi.org/10.1145/1519065.1519090
ノート一覧を閉じる