Process vs ThreadProgram 이란?🚗 Process🛞 ThreadMulti Process vs Multi ThreadMulti Process✨ Context Switcing🧨 Multi Process의 단점은?⚡️ Multi Process의 장점은?IPC란?Multi ThreadStack Memory & PC register🧨 Multi Thread의 단점은?⚡️ Multi Process의 장점은?면접 질문🔖 참고 링크
Process vs Thread
Program 이란?
그저 실행가능한 코드가 구현된 파일
이것이 실행되기 위해서는 메모리에 적재되어야 합니다.
이렇게 메모리에 적재되어 실행되고 있는 프로그램을 프로세스(Process)라고 합니다.
🚗 Process
- 실행파일(program)이 memory에 적재되어 CPU를 할당받아 실행되는 것을 process라고 합니다.
- 운영체제로부터 자원을 할당 받아 실행되는 작업의 단위 입니다.
(메모리의 독립된 영역인
Code
, Data
, Stack
, Heap
을 각각 할당 받습니다.)
- 하나의 프로세스는 다른 프로세스의 자원에 접근이 불가능 합니다.
- 하나의 프로세스는 최소 하나 이상의 스레드(Thread)를 가집니다.
🛞 Thread
- 프로세스 내에서 실행되는 실행 단위이고 독립적인 기능을 수행합니다.
- 프로세스의
Code
,Data
,Heap
을 영역을 공유하고,Stack
만 따로 할당받아 실행됩니다.

💡 메모리 영역
- Code : 실행 명령을 포함하는 코드들
- Data : static 변수
- Heap : 동적 메모리 영역 (Runtime에 메모리 영역 크기가 결정)
- Stack : 지역변수, 매개변수, 반환값 등의 일시적인 데이터
TIP!
프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다.
Multi Process vs Multi Thread
Multi Process
🤔 2개의 Process가 실행된다면? (슬랙, 크롬)
Slack 실행 → Slack 멈춤 → Chrome 실행 → Chrome 멈춤 → Slack 실행...
→ CPU는 한번에 하나의 프로세스만 실행가능!
→ 이렇게 반복하지만 사용자 입장에서는 동시에 실행하는 것처럼 보임.
→ 이렇게 여러 프로세스가 돌아가면서 작업을 처리하는 것을 Context Switcing 이라고 합니다.
✨ Context Switcing
- Context란?
이전에 어디까지 명령을 수행했고, register에는 어떤 값이 저장되어 있었는지 정보가 필요합니다.
process가 현재 어떤 상태로 수행되고 있었는지에 대한 총체적인 정보가 바로 context입니다.
context 정보는 PCB(Process Control Block)에 저장을 합니다.
- PCB(Process Control Block)
- 운영 체제(kernel : 하나의 프로세스)가 프로세스를 표현한 자료구조
특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료 구조
- Context Switch
- 한 프로세스가 다른 프로세스로 CPU 제어권을 넘겨주는 것.
🧨 Multi Process의 단점은?
- Context Switching = 무거운 작업
- 캐시 메모리 초기화 등으로 매우 느림!
(다른 프로세스를 시작 할때, 메모리영역도 완전히 달라지고 많은 것들을 교체를 해야 되서 느림!)
⚡️ Multi Process의 장점은?
- 하나의 Process가 죽더라도 다른 Process에 영향을 주지 않아 안정성이 높다!
- 메모리 구분이 필요할 때는 Multi Process가 유리하다.
IPC란?
Process간에 데이터를 주고 받기 위해서 IPC(Inter-Process Communication) 기법을 사용합니다.
Process는 자신만의 독립적인 주소공간을 가지고, 다른 Process가 참조하는것을 허용하지 않습니다.
(→ 다른 Process와 데이터를 주고 받을 수 없다!)
이를 해결하기 위해 IPC기법을 사용합니다.
⚡️ 공유 메모리(shared memory) vs 메시지 전달(message passing)
- 공유 메모리(shared memory)
- process가 공유 메모리를 할당을 kernal에 요청하면 process 메모리 공간을 할당해줍니다.
- 각 process들이 할당받은 메모리 영역을 접근(read/write)할 수 있습니다.
- 한번 할당을 받은 후에 커널의 관여 없이 통신할 수 있으므로 속도가 빠릅니다!
- 하지만 동시에 같은 메모리 위치에 접근하면서 생기는 일관성 문제가 있습니다.
- ex) POSIX
→ process들이 직접 공유 메모리 접근에 대한 동기화 문제를 책임져야 합니다.
- 메시지 전달(message passing)
- system call을 사용되어 구현됩니다.
- 커널을 통해 send & receive 두가지 연산을 제공받아 사용합니다.
- 공유메모리 보다는 속도가 느리지만, 충돌을 회피할 필요가 없기 때문에 데이터 교환에 유용!
- 구현하기가 쉽다.
- ex) socket, pipe, message queue 등
Multi Thread
- 하나의 프로세스에서 여러개의 Thread로 나누어 각각 작업을 처리하도록 하는 것
- 캐시 메모리를 초기화할 필요가 없어 빠르다!
- 스레드 사이의 작업량이 작아서 Context Switcing이 빠르다!
- 독립적인
Stack Memory
와PC Register
가 필요하다.
Stack Memory & PC register
- Thread가 함수를 호출 시 전달되는 인자, Return Address, 함수 내의 지역변수 등 독립적인 Memory가 필요!
즉슨, 각각의 Thread가 Process내에서 “독립적인 기능을 실행한다 == 독립적으로 함수를 호출한다” 를 의미합니다.
나머지 Code, Data, Heap 영역은 공유하는 형태.
- 한 프로세스 내에서도 thread끼리 Context Switch가 일어나게 되는데,
PC register에 code address가 저장되어 있어야 실행할 수 있기 때문!
🧨 Multi Thread의 단점은?
- 하나의 스레드가 문제가 생기면 전체 프로세스가 영향을 받는다! (웹에서 여러 탭이 사용 중에 하나의 탭에 문제가 생겼을 시 전부 종료된다.)
- 동기화 문제!
서로 다른 thread가 메모리 영역을 공유하기 때문에,
여러 thread에서 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하는 문제
→ 프로그램 설계 시 주의가 필요!
⚡️ Multi Process의 장점은?
- 메모리 공간과 시스템 자원 소모가 줄어듭니다.
- Process를 생성하고 자원을 할당하는 등 system call을 생략할 수 있기 때문에 자원을 효율성 증대
- Context Switching 시, 캐시 메모리 초기화 필요가 없어 속도 빠름!
- process 간의 통신(IPC)보다 통신 비용이 적음 == 오버헤드가 적다!
면접 질문
- Process의 Memory 영역 4가지에 대해서 설명하시오.
- Process의 Context란?
- PCB에 저장되는 것들은 무엇이 있는지?
- Context switch에 대해 설명하시오
- Process의 State에는 어떤 것이 있는지?
- Thread는 왜 독립적인 Stack memory 영역이 필요할까요?
- Process vs Thread 차이
- Multi thread vs Multi process 장단점
- IPC란?
- Multi process/thread 환경에서의 동기화 문제는 어떻게 해결 하나요?
- 교착상태란? 언제 발생하는지?
🔖 참고 링크
✨ 감명깊게 본 영상
🚀 잘 정리된 자료 링크