여러분, 프로세스와 스레드의 차이점, 확실히 알고 계신가요?
조금 헷갈렸던 분들을 위해, 쉽고 확실하게 정리해드리겠습니다!
실행중인 프로그램을 의미한다. 운영체제가 프로그램을 실행할 때, 프로그램 코드, 데이터, 리소스를 포함한 독립적인 실행 단위를 생성하는데 이것이 바로 프로세스.
이렇게만 보면 도대체 무슨 말인지 감이 안 올 수도 있습니다.
윈도우 : 작업관리자
Mac : 활성 상태 보기
를 확인해보면

이런 식으로 나오는 것들이 프로세스라고 볼 수 있다.
위의 프로세스의 주요 특징에서 언급한 PCB에 대해서 간단하게 설명하고 가겠다.
운영체제가 각각의 프로세스를 관리하기 위해 사용하는 자료구조. 즉, 프로세스의 '신분증'이자 '기록부' 같은 역할
PID : 프로세스 고유 번호
프로세스 상태 : 실행 중, 준비 상태, 대기 상태 등
Program Counter : 다음에 실행할 명령어 주소
CPU 레지스터 정보 : 문맥 교환 시 저장되는 정보
메모리 관리 정보 : 페이지 테이블, 메모리 범위 등
파일 디스크립터 : 프로세스가 연 파일 목록
우선순위 등 스케줄링 관련 정보
같은 내용들이 들어있다.
운영체제는 문맥 교환(Context Switching) 시, 현재 프로세스의 정보를 PCB에 저장하고, 새로 실행할 프로세스의 정보를 PCB에서 꺼내서 복원한다.
즉, PCB 덕분에 여러 프로세스를 번갈아가며 실행할 수 있는 것이다 !
A라는 프로그램(프로세스)이 실행 중. (예: 웹 브라우저)
B라는 프로그램(예: 음악 플레이어)이 실행 요청을 보냄.
운영체제는 A의 실행을 잠시 멈추고 B로 전환해야 함.
→ 이게 문맥 교환(Context Switch).
그런데! PCB가 없다면?
📖 현실적인 비유:
PCB 있음: 책갈피를 꽂고 책을 덮었다가, 다시 정확히 읽던 페이지부터 읽기 가능
PCB 없음: 책을 덮었는데 어디까지 읽었는지 기억 안 남 → 처음부터 다시 읽어야 함
프로세스 내부에서의 실행 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이들은 코드, 데이터, 힙은 공유하고 스택은 독립적으로 가진다.

독립적인 실행 단위, 오류 격리가 중요한 경우 : 프로세스
빠른 통신, 데이터 공유가 중요한 경우 : 스레드
멀티코어 활용, 병렬 처리가 필요한 경우 : 스레드 + 동기화
- 프로세스는 무겁고 안전하며, 스레드는 가볍고 빠르지만 동기화의 부담이 있다
- 실제로는 하나의 프로세스 안에 여러 스레드를 두어 동시성을 구현하는 방식이 일반적임 !
- 이를 잘 이해하고 사용하는 것이 멀티 태스킹/멀티 스레딩 환경에서 성능과 안정성을 높이는 핵심 !