실행 중인 프로그램으로, 독립적인 실행 공간을 가진다.
하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있으며, 여러 프로세스를 실행하려면 컨텍스트 스위칭이 필요하다.
CPU가 현재 실행 중인 프로세스의 레지스터, 프로그램 카운터(PC), 스택 포인터 등의 상태를 PCB(Process Control Block)에 저장한 후, 새로운 프로세스의 PCB를 불러와 실행하는 과정이다.
예를 들어,
A 프로세스가 실행되다가 현재 상태(레지스터 값, 실행 위치, 스택 포인터)를 PCB에 저장하고,
B 프로세스의 PCB를 CPU가 다시 로드하여 실행하는 방식이다.
단점은 자주 발생하면 오버헤드가 발생하여 성능이 저하될 수 있다.
프로세스를 구성하는 실행 흐름의 단위이다.
스레드는 각기 다른 스레드ID, 레지스터, 스택 같은 최소한의 값만 가지고 있다. 그리고 한 프로세스 내에서 구성돼있기 때문에 프로세스의 자원을 공유할 수 있다.
하나의 프로세스는 여러 개의 스레드를 가질 수 있는데, 한 개의 스레드만 실행되는 경우 단일 스레드 프로세스이고, 여러 개의 스레드가 실행되면 멀티 스레드 프로세스라고 부른다.
멀티 스레드는 프로세스 내에서 메모리와 자원을 공유하기 때문에, 프로세스 간 통신(IPC)보다 빠르고 효율적이다. 하지만, 동기화 문제(예: 경합 조건, 데드락)가 발생할 수 있기 때문에, 적절한 동기화 기법을 적용해야 한다.

위의 사진을 보면 왼쪽은 멀티 프로세스고 오른쪽은 멀티 스레드이다. 왜 이런 차이가 생길까?
우선 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 사용하기 때문에, 동일한 작업을 수행해도 각각의 메모리에 개별적으로 존재한다.
즉, fork()를 이용해 여러 개의 동일한 프로세스를 만들면 프로세스마다 독립적인 실행 흐름을 가지며, 별도의 메모리를 할당받아 실행된다.
이 방식의 문제점은 메모리 사용량이 증가하고, IPC가 필요하다는 점이다. 이 문제를 해결하기 위해 ‘쓰기 시 복사’라는 개념을 적용한다.
그다음 멀티 스레드는 하나의 프로세스 내에서 여러 개의 실행 흐름이 존재하는 구조이다. 모든 스레드가 같은 메모리 공간을 공유하며, 각 스레드는 개별적인 스택을 가진다. 이 방식의 장점은 메모리를 절약할 수 있고, 빠른 실행 속도를 가진다. 하지만 자원을 공유하기 때문에 한 스레드에서 문제가 생기면 전체적으로 오류가 생긴다.
면접 질문
1. 프로세스와 스레드의 차이를 알려주세요.
2. 컨텍스트 스위칭이란 뭔가요?
3. 멀티 프로세스와 멀티 스레드의 차이점이 뭔가요?
왜 글 안올리시죠? 공부하세요