[Basic] 프로세스(Process)와 쓰레드(Thread) 비교
정리
프로세스(Process)
- 운영체제로부터 자원을 할당받는 작업의 단위
- 프로그램에 대한 인스턴스
- 기본적으로 모든 프로세스는 하나 이상의 쓰레드를 가짐(메인 쓰레드)
- 자신만의 고유 공간과 자원을 할당받음(메모리 공간과 자원 소모가 상대적으로 큼)
쓰레드(Thread)
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 프로세스 내에서 실제 작업을 수행
- 프로세서 내의 주소 공간이나 자원들을 대부분 공유
- 스택 영역만 Switching하면 되므로 Context Switching 속도가 상대적으로 빠름
- 자원 공유로 인한 동기화 문제 발생
- 디버깅 어려움
프로세스와 쓰레드의 차이점
- 프로세스는 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않는다.
- 스레드는 해당 스레드를 위한 스택을 생성할 뿐 그 이외의 Code, Data, Heap영역을 공유한다.
스택을 독립적으로 할당하는 이유
- 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
- 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다.
Code 영역을 공유
- 프로세스는 독립적인 구조이기 때문에 다른 프로세스의 Code영역에 있는 함수를 호출할 수 없다.
- 스레드는 Code영역을 공유하기 때문에 두개 이상의 쓰레드가 자신이 포함된 프로세스의 Code영역에 있는 함수를 호출할 수 있다.
Data, Heap 영역을 공유
- 전역 변수와 동적 할당된 메모리 공간을 공유할 수 있고, 이를 통해 쓰레드 간 통신을 할 수 있다.
- 대신 동시에 메모리에 접근하기 때문에 주의 해야 한다.
참고