Process and Thread - 프로세스와 스레드, 싱글/멀티 스레드
프로세스(Process)
- 운영체제(OS)로부터 리소스를 할당 받은 작업의 단위를 의미
- 프로그램이 하나의 코드 덩어리라면, 프로세스는 프로그램을 실행시켜 정적이었던 프로그램이 동적으로 변해 “프로그램이 돌아가고 있는 상태”를 의미
- 즉, 컴퓨터에서 작업 중인 프로그램을 의미
스레드(Thread)

- 프로세스가 할당받은 리소스를 이용하는 실행 흐름의 단위를 의미
- 복잡해진 지금의 프로그램에서 프로세스 한 덩어리를 사용하기 위해 소요되는 시간을 줄이고 효율을 높이기 위해 등장한 개념
- 즉 프로세스 특성의 한계를 극복하기 위한 방안
- 스레드는 하나의 프로세스 내에서 동시에 진행되는 작업의 갈래, 흐름의 단위를 의미
- 하나의 프로세스 안에서 스레드가 많을 수록 프로그램의 속도도 동시에 진행되는 작업이 많아 성능이 올라감
프로세스와 스레드의 차이
- 프로세스는 프로그램이 실행되어 프로세스가 만들어지면 Stack, Code, Data, Heap 으로 구성된 메모리 영역으로 구성되어 할당 받음
- 프로세스는 메모리에 별도의 주소 공간에서 실행되므로 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 스레드는 프로세스의 4가지 메모리 영역 중 Stack 만 할당받아 복사하고 Code, Data, Heap 은 프로세스 내의 다른 스레드들과 공유됨
- 즉, 스레드는 별도의 Stack 을 가지지만 Heap 은 공유하므로 서로 다른 스레드에서 가져와 읽고 쓸 수 있음
싱글 스레드와 멀티 스레드
- 멀티 스레드
CPU의 최대 활용을 위해 프로그램의 둘 이상을 동시에 실행하는 기술
이러한 작업은 컨텍스트 스위칭을 통해 이뤄짐
- 싱글 스레드
오직 하나의 스레드로만 실행하며, 하나의 레지스터와 스택으로 표현이 가능
싱글 스레드의 장점
- context-switch 작업을 요구하지 않는다.
- 자원 접근에 대한 동기화를 신경쓰지 않아도 된다.
- 단순히 CPU 만 사용하는 계산 작업이면 오히려 싱글스레드가 더 효율적이다.
- 프로그래밍 난이도가 쉽고, CPU 와 메모리를 적게 사용한다.
싱글 스레드의 단점
- 여러개의 CPU 를 잘 활용하지 못한다.
- 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업 수행이 가능하다.
- 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춘다. 멀티 스레드는 에러 발생 시 새로운 스레드를 생성해 극복하지만 싱글 스레드는 그것이 불가능하기 때문.
멀티 스레드의 장점
- 응답성
프로그램의 일부분(스레드 중 하나)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어 사용자에 대한 응답성이 증가한다. 다시 말해, 멀티 스레드 모델은 에러 발생 시 새로운 스래드를 생성해 극복한다. 단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에는 비용이 발생한다.
- 경제성
프로세스 내 자원들과 메모리를 공유하므로 시스템 자원 소모가 줄어든다. 스레드간 통신에도 쉽게 데이터 주고 받기가 가능하며, 프로세스의 context switching 과 달리 스레드 간의 context switching 은 캐시 메모리를 비울 필요가 없어 더 빠르다.
멀티프로세서의 활용
- 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.
멀티 스레드의 단점
- context switching, 동기화 등의 이유로 싱글 코어 멀티 스레딩은 스레드 생성 시간이 오히려 오버헤드가 되어 싱글 스레드보다 느리다.
- 공유하는 자원에 동시 접근할 경우, 데이터와 힙 영역을 공유하므로 다른 스레드에서 사용중인 변수나 자료구조에 접근해 엉뚱한 값을 읽거나 수정할 수 있다. *그래서 동기화가 필요함
- 운영체제의 지원이 있어야 사용이 가능
- 프로그래밍 난이도가 높고, 스레드 수만큼 자원을 많이 사용한다.