IT - Introduction to Computer Science

[IT지식] 쓰레드(Thread)란?

개발자하소서 2022. 5. 30. 17:23
728x90
반응형
SMALL

📌 프로세스와 쓰레드

프로세스(Process)란 단순히 말해 '실행 중인 프로그램(Program)'을 뜻한다. 

프로그램을 실행하면 OS(운영체제)로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다.

즉, 다시말해 사용자가 작성한 프로그램이 운영체제 의해서 메모리 공간을 할당받아 실행 중인 것을 말한다.

프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원, 쓰레드로 구성되어있다. 

 

쓰레드(Thread)란 프로세스(process) 내에서 실제로 작업을 "수행하는 주체"를 의미한다.

그렇기에 모든 프로세스에는 한 개 이상의 쓰레드가 존재하여 작업을 수행한다.

 각 쓰레드별로 자신만의 스택 레지스터를 가진다.

또한, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티쓰레드 프로세스(multi-threaded process)라고 한다.

 

즉, 다시말해

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

 

📌 멀티쓰레드

 

멀티쓰레드는 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것이 가능하다.

실제로는 한 개의 CPU가 한 번에 단 한가지 작업만 수행할 수 있기 때문에

아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써

동시에 여러 작업이 수행되는 것처럼 보이게 하는 것이다.

 

ex) 메신저의 경우 채팅하면서 파일을 다운로드 받거나 음성대화를 나눌 수 있는 것이 가능한 이유가

       바로 멀티쓰레드로 작성되어 있기 때문이다.

 

프로세스에는 최소한 하나 이상의 쓰레드가 존재하며,

둘 이상의 쓰레드를 가진 프로세스를 멀티 쓰레드 프로세스 라고 한다.

 

프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않으나

쓰레드가 작업을 수행하는데 개별적인 메모리 공간(호출 스택)을 필요로 하기 때문에

프로세스의 메모리 한계에 따라 생성할 수 있는 쓰레드의 수가 결정된다.

 

CPU의 코어가 한 번에 단 하나의 작업만 수행할 수 있으므로,

실제로 동시에 처리되는 작업의 개수는 코어의 개수와 일치한다.

그래서 프로세스의 성능이 단순히 쓰레드의 개수에 비례하는 것은 아니며,

하나의 쓰레드를 가진 프로세스보다 두 개의 쓰레드를 가진 프로세스가 오히려 더 낮은 성능을 보일 수도 있다.

 

📌 멀티쓰레드 사용이점

1. 자원을 효율적으로 사용할 수 있다
2. CPU의 사용률을 향상시킨다.

 

BUT

여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에

발생할 수 있는 동기화, 교착상태와 같은 문제들이 있기에 멀티 쓰레드 프로그래밍은 항상 주의해야 한다

 

 

728x90
반응형
LIST