← 질문 목록
#241깊이 0
프로세스와 스레드의 핵심 차이는 무엇인가?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
프로세스는 자원과 보호의 경계다. 스레드는 그 안에서 스케줄되는 실행 흐름이다. 무엇을 공유하고 어디까지 실패를 격리할지가 핵심 차이다.
| 범위 | 프로세스끼리 | 같은 프로세스의 스레드끼리 |
|---|---|---|
| 가상 주소 공간 | 기본은 분리 | 코드·전역 데이터·힙 공유 |
| 실행 상태 | 각자 가짐 | 레지스터·스택·스레드 로컬 상태는 각자 가짐 |
| 파일과 신호 설정 | 각 프로세스의 자원 | 열린 파일과 일부 프로세스 속성 공유 |
| 통신 | IPC나 공유 메모리를 명시 | 같은 메모리를 직접 읽고 씀 |
스레드는 스택만 따로 가진다고 축약하면 빠지는 것이 많다. 스레드 ID, 레지스터와 스케줄링 상태, signal mask, errno 같은 스레드별 상태도 있다. 공유 범위는 언어 런타임과 운영체제에 따라 세부가 달라진다.
같은 주소 공간은 값 전달이 싸지만 동기화가 필요하다. 데이터 경합으로 메모리가 깨지거나 처리하지 않은 치명적 오류가 나면 프로세스 전체가 끝날 수 있다. 한 스레드만 재시작해 안전하다고 가정하기 어렵다.
프로세스 경계도 완전한 독립을 뜻하지 않는다. 공유 메모리와 파일, 네트워크 같은 외부 자원을 함께 쓸 수 있다. 한 프로세스의 과도한 CPU·메모리 사용이 다른 프로세스를 굶길 수도 있어 별도 자원 제한이 필요하다.
같은 프로세스의 스레드 전환은 주소 공간을 유지해 더 쌀 수 있다. 그래도 레지스터 저장, 스케줄러와 캐시 비용은 남는다. 프로세스 전환은 항상 무겁고 스레드 전환은 항상 싸다고 고정하지 않는다.
빠른 공유가 중요하면 스레드가 잘 맞는다. 보안·장애·수명 주기를 나눠야 하면 프로세스 경계가 유리하다. 실제 서버는 여러 프로세스 안에 여러 스레드를 두기도 한다.
추천 꼬리질문
관련 질문
- 스레드 풀을 사용하는 주된 이유는 무엇인가?운영체제스레드 풀의 효율성을 이해하려면 먼저 프로세스와 스레드의 구조적 차이와 스레드 생성 비용에 대한 이해가 필요하다.
- 스레드를 늘려도 CPU 병렬성이 없는 이유는?언어 · 런타임프로세스와 스레드의 차이를 이해해야 스레드가 CPU 자원을 어떻게 공유하고 경쟁하는지 알 수 있다.
- 멀티스레드 환경에서 스레드 세이프한 코드를 작성하는 방법은 무엇인가?운영체제멀티스레드 환경에서의 스레드 세이프티를 이해하려면, 먼저 스레드가 공유하는 자원과 프로세스와의 차이를 이해해야 한다.
- 뮤텍스와 세마포어는 무엇으로 구분하는가?운영체제
- 스택과 큐의 가장 큰 차이는 무엇인가?자료구조 · 알고리즘