쓰레드란?
Intro
스레드란, 프로세스 내에서 실행되는 작업의 흐름이자, 기본적인 작업 단위이다. 스레드 ID, 프로그램 카운터, 레지스터 집합과 스택으로 구성되어 있다. 동일한 프로세스 내 여러 스레드는 코드와 데이터, 기타 자원을 공유한다. 하나의 프로세스가 여러 스레드를 가지면, 동시에 여러 작업을 수행할 수 있다.
현대의 운영체제는 한 프로세스가 여러 개의 스레드를 포함한다. 이에 따라 다중 CPU를 제공하는 멀티코어 시스템에서 스레드를 통한 병렬처리가 중요해졌다.
또 현대 어플리케이션의 상당수는 멀티 스레드를 이용한다. 예를 들어 웹 브라우저는 하나의 프로세스 내에서 하나의 스레드는 UI를 표현하고, 다른 스레드는 네트워크 통신을 하는 등 여러 작업을 동시에 수행한다.
왜 스레드를 사용할까?
비슷한 작업 여러 개를 처리해야 하는 어플리케이션인 웹 서버를 가정해보자. 웹 서버는 웹 페이지, 이미지 등에 대한 클라이언트의 요청을 받는다. 이때 요청이 몰리면 동시에 여러 클라이언트의 요청을 처리해야 한다. 스레드라는 개념이 등장하기 이전에는 여러 개의 요청에 대응하기 위해 각각 요청에 대한 프로세스를 새로 생성해야 했다. 하지만 프로세스 생성은 비용이 많이 드는 작업이다.
스레드가 등장하며 이러한 문제는 해결되었다. 대부분의 경우 프로세스를 여러 개 생성하는 것보다 하나의 프로세스에서 스레드를 여러 개 생성하여 병렬적으로 작업을 처리하는 것이 더 효율적이다. 웹 서버의 예시로 돌아가보자. 멀티스레드를 사용하는 웹 서버는 클라이언트의 요청을 받으면, 다른 클라이언트의 요청을 받을 수 있게 'listen'하는 스레드를 생성하고, 이미 들어온 요청을 처리할 수 있는 스레드를 생성하여 새로운 요청을 받으면서 동시에 기존 요청을 처리할 수 있게 된다.
멀티 스레드의 장점
- 응답성 향상
- 사용자 인터페이스를 가진 어플리케이션은 사용자의 입력에 빠르게 반응해야 하는데, 멀티 스레드를 사용하면 사용자의 입력을 처리하는 동안 다른 스레드가 작업을 처리할 수 있어 사용자가 더 빠른 응답을 받을 수 있다.
- 자원 공유
- 프로세스 간 통신은 공유 메모리나 메시지 전달 방식을 통해서 이루어져야 하는데, 스레드는 기본적으로 자신이 속한 프로세스의 메모리 공간에 위치한다. 따라서 프로세스는 동일한 주소 공간 내에 서로 다른 역할을 하는 스레드에 자원과 작업을 맡길 수 있다.
- 경제성
- 새로운 프로세스에 메모리와 자원을 할당하는 것보다 같은 메모리 공간을 공유하는 스레드를 여러 개 생성하는 것이 더 경제적이다.
- 확장성
- 싱글 스레드를 사용하는 프로세스는 사용 가능한 CPU가 많아도 하나의 CPU 코어만 사용할 수 있는 반면, 멀티 스레드를 사용하는 프로세스는 여러 개의 CPU 코어에서 병렬적으로 작업을 처리할 수 있다.