メインコンテンツへ
ソフトウェアスレッドとプロセス

スレッド(Thread)とプロセス(Process)の違いとして正しいものはどれか。

ア.スレッドはOSに管理されないため、プロセスよりも安全性が高い。
イ.スレッドはプロセスよりも多くのメモリを消費し、生成コストが高い。
ウ.スレッドは同一プロセス内のメモリ(ヒープ・グローバル変数)を共有するが、プロセスは独自のメモリ空間を持つ。正解
エ.プロセスは1つのプログラム内でしか生成できず、マルチコアの活用にはスレッドのみが使える。

解説

プロセスは「それぞれ別の部屋を持つ住民」、スレッドは「同じ部屋を共有するルームメイト」。共有は効率的ですが、使い方を間違えると衝突(競合状態)が起きます。

なぜ ウ が正解か

プロセスは独立したメモリ空間(コードセグメント・ヒープ・スタック)を持ちます。 スレッドは同じプロセスの中で生きる実行単位で、 ・共有: ヒープ、グローバル変数、ファイルディスクリプタ ・独自: スタック、レジスタ、プログラムカウンタ スレッドは同じメモリを共有するため生成コストが低く(軽量プロセスとも呼ばれる)、コンテキストスイッチも高速です。ただし共有リソースへの競合アクセスには排他制御が必要です。

なぜ ア は間違いか

スレッドもOSによって管理されます(OSスレッドの場合)。スレッドはメモリを共有するためプロセス間より安全性が低い面があります——1つのスレッドのバグが同プロセスの全スレッドに影響する可能性があります。

なぜ イ は間違いか

スレッドはプロセスより少ないメモリしか消費せず、生成コストも低いです。スレッドは独立したメモリ空間を持たず、同じプロセスのリソースを共有するため「軽量プロセス(Lightweight Process)」とも呼ばれます。

なぜ エ は間違いか

プロセスは別のプロセスを生成(forkなど)でき、複数プロセスによるマルチコア活用も可能です(マルチプロセス並列化)。マルチコアの利用はスレッドだけの専売特許ではありません。

出典: AI生成問題(学習用)