Thread 의 개념

2021. 7. 7. 15:24운영체제

 

프로세스와 스레드의 차이는 무엇일까?

프로세스란, 실행 중인 프로그램이라고 할 수 있다.

사용자가 작성한 프로그램이 운영체제로부터

메모리 등의 (1) 자원을 할당 받고, 그 (2) 자원을 제어하여 작업을 수행하는 것이다.

 

여기서 (2) 자원을 제어하여 작업을 수행 을 맡는 친구가 바로 스레드이다.

스레드란, 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.

즉, 프로세서 활용의 기본 단위라고 할 수도 있다!

 

스레드는 각각의 제어 정보가 있고, 각각의 작업을 수행하지만

(1) 프로세스가 할당받은 자원은 공유하게 된다

이러한 측면에서 Light Weight Process (LWP) 라고도 한다.

 

또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 하는데,

스레드가 여러 개라는 것은, 프로세서의 코어를 여러 개 사용할 수 있다는 것.

 

코어는 프로세서에 물리적으로 존재하는 연산부. 뇌의 개수라고 생각할 수 있다.

스레드는, OS에서 인식하고 작동하는 작업 단위이다.

 

기본적으로는, 1개의 코어 = 운영체제에서의 1개의 스레드로 생각하면 된다. 

1개의 코어를 OS 가 2개의 스레드로 인식하도록 하는 Hyper Threading 이라는 기술이 있다.

즉, 스레드 = 논리적 코어 !

 

 

출처 : HPC Lab. KOREATECH

 

스레드의 구성

  • Thread ID
  • Register set - Program counter, Stack pointer 등 다양한 상태 정보
  • Stack  - 각 스레드의 작업 영역, local data

위와 같은 제어 요소 외에,

프로그램 코드, 전역 데이터 등 자원은 프로세스 내 다른 스레드와 공유하는 형태이다.

스레드의 장점

 

먼저, 자원을 공유하여 효율성과 경제성이 증가한다 !

프로세스 단위에서는, 한 자원을 두 프로세스가 사용할 경우 번갈아 가며 접근해야 하고,
Context switching 이 계속 일어난다. 이는 무거운 연산이고, 오버헤드가 크게 발생하게 된다. 

 

스레드는 한 자원을 공유하므로, 효율적으로 동작할 수 있다.
스레드의 경우에도 물론 Context switching 이 발생하지만,
그 비용이 상당히 적다. 또한 프로세스 생성으로 인한 오버헤드도 감소한다.

 

https://stackoverflow.com/questions/5440128/thread-context-switch-vs-process-context-switch

 

Thread context switch Vs. process context switch

Could any one tell me what is exactly done in both situations? What is the main cost each of them?

stackoverflow.com

 

 

위에서 언급한, 멀티스레드를 활용한 병렬처리를 통해 성능을 향상 시킬 수 있으며,

사용자 응답성 또한 제고된다.

이게 무슨 말인고, 하면

 

게임을 하는 상황을 생각해보자.

 

화면출력
^
   스피커  <  process >    키보드

 

 

현재, 프로세스는 화면을 출력하는 running state 에 있다.

이 상태에서 키보드 입력 등, I/O 가 발생하면

프로세스는 에서 block state 로 내려간다.

화면을 출력하던 작업이 중단되는 것이다 !

다시 ready state 를 거쳐 running state 로 돌아가기까지,

잠시 멈춘 듯한 현상이 발생한다.

 

게임이 멀티스레드 프로세스라면 이러한 문제를 해결할 수 있다.

3 개의 작업을 3 스레드로 각각 처리하면,

일부 스레드가 block 된다던가 지연되더라도 다른 스레드는 계속해서 작업이 가능하기 때문에,

화면 멈춤과 같은 현상이 없어질 것이고

사용자 입장에서의 응답성이 좋아진다는 것이다!