[面接の質問】ProcessとThreadの違い、Multi Thread
ProcessとThreadの違いについての面接質問まとめ
まだ執筆中の記事です!23.05.30. 執筆完了→ 23.06.09. 内容追加
Program
コンピュータが特定の作業を実行するために書かれた、実行可能な一連の命令のまとまり
さまざまに定義されているが、全体を読んだ上でこのように理解することにした!プログラムの定義を先に確認した理由は、Process の定義がより範囲の狭いプログラムだからである。
Process
「実行中の」プログラムの「インスタンス」 (Task とほぼ同じ意味で使われる)
メモリ上で実行される、OS から見た作業単位
生成に多くの時間と資源を消費する (オーバーヘッドが大きい)
プログラムそのものではなくプログラムのインスタンスとして、複数が同時に存在し得る点が特徴的だと考える。
Thread
プロセス内の作業を実行する、CPU から見た実行単位
すべてのプロセスは 1 つ以上のスレッドを持つ
スレッドはそれぞれ独自のレジスタとスタックを持つ
Heap メモリ領域は共有する
では両者の違いは?
Process がより大きな範囲の単位だと言える
ただ単にここまでの説明だと、かなり包括的な答えだと思われそうなので、よく整理された記事を参考に追加でまとめてみた!
動作のしかた
1. Process の場合
-
プロセスは実行時に別個のメモリ領域を OS から割り当てられる
-
メモリ領域は Code/Data/Stack/Heap の形を持つ
-
他プロセスのメモリ領域にはアクセスできない
2. Thread の場合
-
Process の Stack 領域は分割し、固有領域を持つ
-
残りの Code, Data, Heap 領域は共有する
1 つのプロセスのエラーが他プロセスの領域に波及しない
But ひとつのスレッドでエラーが発生するとスレッド全体が終了する → メモリ領域を共有している部分があるため
まとめ
Process と Thread の違いとは?
-
プロセスは動的に使われているプログラムで、スレッドは作業実行単位の一種であり、概念そのものが異なる
-
プロセスは最低 1 つ以上のスレッドを含む
-
プロセス同士は通常メモリ空間を共有しないが、スレッドは共有する
-
エラー発生時、プロセスは自分だけがダウンするのに対し、スレッドは同一プロセス内のすべてが落ちる
+ Multi-Thread について
1 つのプロセス内で複数のスレッドが同時に作業を実行すること
コンテキストスイッチ (Context Switching)
基本的に同時に処理できる最大作業数は Core の数に等しい Core 数を超えるスレッドが動く場合、各コアが複数の作業を切り替えながら実行する スレッドが切り替わるとき、現時点までの作業状態や次の作業に必要なデータを保存・復元する処理
マルチスレッドとマルチプロセスの長所・短所
1) マルチスレッドの長所
-
プロセス生成や資源割り当てのためのシステムコールが減り、資源の効率的な管理が可能
-
1 つのプロセス内では Stack を除くメモリ空間を共有するため、スレッド間のデータのやり取りに掛かる処理コストが小さい
-
スレッド間の通信方法が複雑ではないため、プログラムの応答時間を短くできる
2) マルチスレッドの短所
-
デバッグの難しさと設計難易度の上昇
-
他のプロセスからスレッドを制御できない
-
メモリ共有による同期問題 (同時に同じ資源へアクセス)
-
スレッドで問題が起きると、プロセス全体に影響が及ぶ
3) マルチプロセスの長所
- プロセスに問題が起きてもその影響が外部のプロセスに広がらない
4) マルチプロセスの短所
-
コンテキストスイッチでのオーバーヘッドが大きい
-
プロセス間通信はスレッド間通信に比べて難しく複雑になりがち
参考
위키백과의 프로세스와 스레드 항목 프로세스와 스레드의 차이 by raejoonee 프로세스와 스레드의 차이 by heejeong Kwon
댓글 작성
게시글에 대한 의견을 남겨 주세요.