프로세스(Process) vs 스레드(Thread)
Process란?
- 운영체제 위해서 실행중인 Program을 말한다.
- 프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 대기중인 상태이다.
- 크게 4개의 메모리 영역을 가지고 있다.
- Stack : 매개변수, 지역변수 등 일시적인 데이터
- Heap : 동적으로 할당되는 메모리 : 예) 자바의 new Object(), C언어의 malloc()
- Data : 전역 변수 : 예) static 변수, global 변수
- Text(Code) : 실행 명령을 하는 Program의 코드들
Thread란?
- 프로세스 내에서 실행되는 흐름의 단위이다.
- CPU 이동의 기본 단위
- 프로세스 내에서 각각 Stack만 따로 할당 받고, Text, Data, Heap 영역은 프로세스와 공유한다.
- 각 Thread는 별도의 Stack 영역을 가진다.
Multi Thread (멀티 스레드)
- 프로세스의 자원을 공유
- 향상된 응답성
- Context switching 비용이 적음
- 자원을 공유하는 만큼 충돌을 주의 (Thread-safe 하게)
- 예 ) Web Server
멀티 스레드 주의점
- 한 프로세스 안의 스레드에 문제가 생기면 같은 프로세스 안의 스레드도 같이 문제가 생긴다.
- 따라서 같은 데이터를 공유하기 때문에, 데이터 동기화에 신경써야 한다.
Multi Process (멀티 프로세스)
- 하나의 작업을 여러 개의 프로세스가 처리하는 것을 말한다.
- 프로세스가 통신 (IPC, Interprocess communication)
- Context Switching 비용이 큼
- 자식 프로세스 중 하나가 문제가 생겨도 다른 프로세스에 영향이 없다.
- 예 ) google chrome
멀티 프로세스로 처리 가능 한 것을 멀티 스레드를 같이 사용하는 이유
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로서, 자원의 효율적 관리가 가능하다.
- 프로세스 간의 통신 (IPC)보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소한다.
- 대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 동기화에 신경써야 한다.
프로세스와 스레드 차이 정리
- 프로세스는 메모리 상에서 실행중인 프로그램, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
- 프로세스마다 최소 하나의 스레드를 가지고 있다. 그리고 각각 별도의 주소공간을 독립적으로 할당받는다.
- 각 메모리 영역은 code, data, heap, stack 영역으로 나뉜다.
- code(text) 영역 : Program의 코드
- data 영역 : 전역 변수 예) static 변수, global 변수
- heap 영역 : 동적으로 할당되는 메모리 예) new Object(), malloc()
- stack 영역 : 매개변수, 지역변수 등 임시 자료들
- 스레드는 이 중에 stack만 따로 할당 받고 나머지 영역은 스레드끼리 서로 공유한다.
- 결론:
- 프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
- 스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용