[면접 질문] Process와 Thread의 차이, Multi Thread
Process와 Thread의 차이에 대한 면접 질문 정리
아직 작성 중인 글입니다!23. 05. 30. 작성 완료→ 23. 06. 09. 내용 추가
Program
컴퓨터가 특정 작업을 수행하기 위해 작성된 실행 가능한 일련의 명령어 모음
다양한 방식으로 정의되어 있지만 전반적으로 읽어봤을 때 이렇게 이해하기로 했다! 프로그램에 대한 정의를 먼저 확인한 이유는 프로세스의 정의가 좀 더 좁은 범위의 프로그램이기 때문이다.
Process
'실행 중인' 프로그램의 '인스턴스' (Task와 거의 비슷한 의미로 사용)
메모리 상에서 실행되는 운영체제 기준의 작업 단위
생성에 많은 시간과 자원을 소비함 (오버헤드가 크다)
프로그램 자체가 아닌 프로그램의 인스턴스로 여러 개가 동시에 존재하는 것이 가능하다는 것이 특징적인 부분이라고 생각한다.
Thread
프로세스 내 작업을 수행하는 CPU 기준의 실행 단위
모든 프로세서는 1개 이상의 스레드가 존재
스레드는 각각의 레지스터와 스택을 보유
힙 메모리 공간은 공유
그래서 둘의 차이는?
프로세스가 좀 더 큰 범주의 단위라고 볼 수 있음
하지만 단순하게 여기까지만 말하는 거라면 굉장히 포괄적인 답변이라고 생각할 수 있을 거 같아서 잘 정리된 글들을 참고해서 추가적인 정리를 해보았다!
작동 방식
1. Process의 경우
-
프로세스가 실행 시 별도의 메모리 영역을 운영 체제로부터 할당
-
메모리 영역은 Code/Data/Stack/Heap의 형식을 가짐
-
다른 프로세스의 메모리 영역에 접근할 수 없음
2. Thread의 경우
-
Process의 Stack 영역은 분할하여 고유 영역을 보유
-
나머지 Code, Data, Heap 영역은 공유
프로세스의 오류가 다른 프로세스의 영역으로 번지지 않음
But 하나의 스레드가 오류 발생하는 경우 전체 스레드 종료 → 메모리 영역을 공유하는 부분이 존재하기 때문
정리
Process와 Thread의 차이점이란?
-
프로세스는 동적으로 사용 중인 프로그램, 스레드는 일종의 작업 실행 단위로 개념 자체가 다름
-
프로세스는 최소 1개 이상의 스레드를 포함
-
프로세스끼리는 메모리 공간을 일반적으로 공유하지 않으나 스레드는 공유
-
각각의 오류 발생 시 프로세스는 혼자만 다운, 스레드는 동일 프로세스 내 전체 다운
+ Multi-Thread에 대하여
하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업을 수행하는 것
문맥 교환 (Context Switching)
기본적으로 동시에 처리할 수 있는 최대 작업 수는 Core의 수만큼 Core의 수보다 많은 스레드가 실행되는 경우 각 코어가 여러 작업을 번갈아가면서 수행 스레드가 교체될 때 현재까지의 작업 상태나 다음 작업에 필요한 데이터를 저장하고 읽어오는 작업
멀티 스레드와 프로세스의 장단점
1) 멀티 스레드의 장점
-
프로세스 생성 및 자원 할당을 위한 시스템 콜이 졸어 자원의 효율적 관리가 가능.
-
한 프로세스 내의 Stack을 제외한 메모리 공간을 공유하므로 스레드 간 데이터 주고 받는 처리 비용이 적음.
-
스레드 간의 통신 방법이 복잡하지 않아 프로그램 응답 시간을 단축할 수 있음.
2) 멀티 스레드의 단점
-
디버깅의 어려움 및 설계 난이도의 상승
-
다른 프로세스에서 스레드 제어 불가능
-
메모리 공유로 인한 동기화 문제 (동시에 같은 자원에 접근)
-
스레드의 문제 발생 시 전체 프로세스에 영향
3) 멀티 프로세스의 장점
- 프로세스에 문제 발생 시 해당 프로세스 외부로 영향이 확산되지 않음
4) 멀티 프로세스의 단점
-
문맥 교환에서의 오버헤드가 큼
-
프로세스 간 통신은 스레드 간 통신보다 어렵고 복잡한 편
참고
위키백과의 프로세스와 스레드 항목 프로세스와 스레드의 차이 by raejoonee 프로세스와 스레드의 차이 by heejeong Kwon
댓글 작성
게시글에 대한 의견을 남겨 주세요.