스레드
스레드란?
정의
- 하나의 프로세스 내에서, 더 작은 단위들로 각각 독립적으로 실행되며, 각각 제어가 가능한 흐름
- CPU 이용의 기본 단위
- 하나의 프로세스 내에서는 반드시 하나 이상의 스레드가 존재한다. 이 스레드를 메인 스레드라고 한다.
역할
- 여러개의 작업단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 필요하다.
- ex) 1개의 프로세스 내에 2개의 스레드가 존재한다면 이는 2개의 프로세스와 같은 처리속도를 낸다.
모든 스레드는 프로세스의 메모리 공간을 공유하기에 빠름
- ex) 1개의 프로세스 내에 2개의 스레드가 존재한다면 이는 2개의 프로세스와 같은 처리속도를 낸다.
- 프로세스보다 경량(lightweight)이어서 프로세스보다 생성과 제거가 용이하다.
- 프로세스를 생성할 때 메모리 할당에 많은 자원이 필요
구조

- 스레드는 프로세스 내의 Code, Data, Heap 영역을 다른 스레드와 공유하고, Stack영역은 따로 할당 받는다.
- 여러 스레드는 한 프로세스 내의 Code, Data, Heap 영역을 공유하지만, 프로세스간에는 서로 메모리에 접근할 수 없다
- 스레드는 별도의 Register와 Stack을 가지고, 그외의 다른영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면 다른스레드도 그 변경 결과를 가져올 수 있다
장점
- 응답성 (responsiveness) ; 사용자의 응답성 증가
- 자원 공유 (resource sharing) ; 같은 주소 공간에서의 공유
- 경제성 (economy) ; 메모리와 자원
- 효율성 (utilization) ; 동시 실행
멀티 프로세스와 멀티 스레드
멀티 프로세스
- 정의
- 여러 개의 프로세스가 서로 협력적으로 일을 처리하는 것
- 각 프로세스가 하나의 task를 맡아서 수행
- 여러 개의 프로세스가 작업을 병렬처리 하는 것
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용
- 장점
- 독립된 구조이기 떄문에 안정성이 높다
- 여러 프로세스가 같이 작업하고 있기 때문에 하나의 프로세스가 죽어도 문제가 확산되지는 않는다.
- 단점
- 멀티 스레드보다 많은 메모리 공간과 CPU시간을 차지
- 독립된 메모리 영역이기 때문에 문맥교환이 발생 즉 오버헤드가 발생
멀티 스레드
- 정의
- 하나의 프로세스를 여러개의 스레드로 구성
- 하나의 스레드가 하나의 task를 수행
- 장점
- 프로세스를 생성하기 위한 프로세스에 자원을 할당하는 작업 (시스템호출)이 줄어들어 자원의 효율성이 증가
- 스레드는 프로세스 메모리의 코드/데이터/힙 영역은 공유하므로 문맥교환이 발생할때, 스택영역만 처리하면 되어 문맥교환 처리비용이 감소
- 스레드는 프로세스 메모리의 코드/데이터/힙 영역은 공유하므로 프로세스간의 통신보다 스레드간의 통신이 응답속도가 빠름
- 단점
- 하나의 스레드가 문제가 생기면 , 모든 프로세스가 종료
- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생