プロセス、スレッドの違い
プロセス | スレッド | |
---|---|---|
特徴 | プロセスはリソースを共有できない。ロックかけたりしないといけない。 プロセス間通信も出来る(unixだとパイプ) |
メモリや、オープン中のファイルなどのリソースを共有することができる。 競合(レースコンディション)が問題になる |
生成方法 | 親プロセスからforkで子プロセス生成 | 親プロセスからpthread_createでスレッド生成 |
データ保持 | ・1プロセス毎に専用の仮想アドレス空間を保持。 ・データセグメントのデータはそれぞれのメモリ領域内に保持。 ・なのでスレッドよりコンテキストスイッチによるオーバーヘッドが大きい |
・全て親プロセスのメモリ領域内に保持されているため、利用する仮想アドレス空間を切り替える必要がない。 TLBフラッシュはいらない。 ・スタック領域、SP、PCを親プロセスに生成する |
切り替える場合 | ・仮想アドレス ⇔ 物理アドレス のマッピングをそのプロセス用のものへの切り替える必要がある。 ・1度アドレスを解決した結果は MMU がキャッシュしているため、そのままの状態でプロセスを切り替えてしまうと前のプロセスの領域が見えてしまう。 ・そのためMMUキャッシュをクリア=TLBフラッシュが必要。 |
スタック領域、SP、PCの切り替えだけで済む |
メモリに保持する情報 | ①親プロセスのテキストセグメント ②親プロセスのデータセグメント③子プロセスのデータセグメント(親のコピー) |
①親プロセスが作った、スレッド用のテキストセグメント ②親プロセスが作った、スレッド用のデータセグメント ・ 親プロセスのスタック領域 ・スレッドのスタック領域(親のコピー) |
処理速度 | 遅い | 速い |
データの安全性 | メモリ領域が独立してるので安全 | スレッドセーフでなければならない |
並列処理の動作 | 子プロセスを複数立ち上げて並列 | スレッドを複数立ち上げて並列 |