프로세스? 프로그램?
프로세스는 운영체제로 부터 할당받는 작업의 단위입니다.
프로그램과 프로세스의 차이가 모호하다 느낄 수 있지만 프로그램은 메모리에 적재되지 않고 CPU를 할당 받지 않은 저장장치에 저장되어있는 코드 덩어리지만 프로세스는 프로그램이 실행되어 메모리에 적재되어 CPU를 할당 받아 실행중인 작업입니다.
프로세스? 쓰레드?
앞서 프로세스는 프로그램이 실행되어 CPU를 할당 받아 실행중인 작업의 단위라고 언급했습니다.
쓰레드는 프로세스가 할당받은 자원을 사용하는 또 하나의 독립적인 작업단위(흐름 단위) 입니다.
프로세스와 쓰레드의 메모리 구조
프로세스는 아래와 같이 1개 이상의 쓰레드를 가지고 있는데 각 쓰레드는 Stack 영역을 할당 받습니다.
그리고 Heap, Data, Code 영역은 하나의 프로세스 내 모든 쓰레드가 공유하는 영역입니다.

스택영역은 함수 호출 시 전달되는 인자, 되돌아갈 주소, 함수 내 지역변수 저장 등에 사용되는 메모리 영역입니다.
즉 독립적인 스택영역이라는 것은 함수 호출이 독립적인것이고, 이는 실행 흐름이 독립적이라는 말과 같습니다.
스레드는 각각 하나의 독립적인 실행 흐름입니다. 이는 스택영역이 쓰레드 마다 독립적으로 할당되어 있기 때문입니다.
멀티 프로세스? 멀티 쓰레드?
멀티 프로세스는 하나의 프로그램을 여러개의 프로세스로 구성하는 방법입니다.
멀티 쓰레드는 말 그대로 하나의 프로세스에 여러 쓰레드를 사용하는 방법입니다.
두 방법에는 모두 장단점이 있습니다.
멀티 프로세스의 장점
- 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 끼치지 않습니다.
- 구현이 간단합니다.
멀티 프로세스의 단점
- 컨텍스트 스위칭이 많아집니다. 성능 저하가 발생할 수 있습니다.
- 메모리 사용량이 많습니다.
- 프로세스간 통신을 위해서는 IPC, LPC 등 방법을 이용해야합니다. 이는 CPU 레지스터 교체, RAM와 CPU 사이의 캐시 메모리가 초기화 되기 떄문에 자원 부담이 큽니다.
멀티 쓰레드의 장점
- 자원 공유가 간단합니다.
- 스레드의 할당 비용이 프로세스 할당 비용에 비해 적습니다.
- 스레드간 통신 비용이 상대적으로 적게듭니다. 모든 메모리 영역을 스위칭하는 멀티 프로세스 방식에 비해 멀티 쓰레드 방식은 스택영역만 스위칭하면 됩니다.
멀티 쓰레드의 단점
- 자원을 공유하기 때문에 하나의 쓰레드에 문제가 발생하면 다른 쓰레드에 영향을 끼칠 수 있습니다.
- 디버깅이 어렵습니다.
- 자원을 공유하기 때문에 동기화 이슈가 발생할 수 있습니다.
너무 많은 쓰레드는 오히려 성능 저하를 일으킬 수 있다.
쓰레드가 많다고 무조건 성능이 향상되는 것은 아닙니다. 멀티 쓰레드 방식이 성능이 좋은 이유는 컨텍스트 스위칭 비용이 적기 때문인데, 쓰레드 역시 주어진 한정된 자원을 쪼개어 사용하는 방식이므로 한계가 있습니다.