プロセスは自身のメモリを持つ隔離されたプログラムであり、スレッドは同じプロセス内の他のスレッドとメモリを共有する実行の単位です。 1つのプロセスは多数のスレッドを含みうる。
仕組み
- プロセス: 独自のアドレス空間、ファイルディスクリプタ、ヒープを持つ。OSによって隔離され、あるプロセスのクラッシュやメモリバグが別のプロセスを壊すことはできない。コンテキストスイッチと通信(IPC)は比較的高コスト。
- スレッド: プロセスの内部に存在し、ヒープとグローバル変数を共有するが、独自のスタックとレジスタを持つ。生成と切り替えは安価だが、メモリを共有するため同期が必要になる。
text
Process A Process B
├─ heap (shared by threads) ├─ heap
├─ Thread 1 (own stack) └─ Thread 1
└─ Thread 2 (own stack)
↑ threads share heap → must lock shared data
例
python
threading, multiprocessing
counter =
threading.Thread(target=: work(counter)).start()
multiprocessing.Process(target=work, args=(data,)).start()
