본문 바로가기
IT

[운영체제 OS] 스레드(Thread) 개념과 멀티 쓰레드 간단히 이해하기

by 명석한 쭌이 2023. 7. 16.

 

스레드에 대해서 알아보자

스레드는 CPU를 활용함에 있어 기본단위라고 할 수 있으며, 프로세스에서 실행의 개념만을 분리한 것이다.

프로세스의 구성을 제어의 흐름 부분과 실행 환경 부분으로 나눌 때 스레드는 제어 부분을 담당한다.

 

스레드 각각의 고유한 스레드 ID, 프로그램 카운터 ( PC: program counter ), 레지스터 (집합), 스택 ( stack )으로 구성되며,

코드(code), 데이터 섹션(Data section), 오픈 파일(Open files)과 같은 운영체제 자원을 공유한다.

공유영역

스레드 간의 값을 공유하는 영역으로 스레드 통틀어 공통된 값을 가짐.

 

고유영역

이 영역 내에서는 스레드 각각 다른 유니크한 값을 가지는 영역. 중복값을 가지면 안 됨.

 

스레드 ID : 각각 스레드를 구분할 수 있게 해 줌. 데이터베이스의 인덱스와 비슷

프로그램 카운터(PC) : 프로세스가 다음 실행할 명령어의 주소.

스택(Stack) : 함수 호출 시 지역변수 및 매개변수들이 저장되는 메모리 공간.

레지스터(Register) : 누산기, 인덱스 레지스터, 스택 레지스터, 범용 레지스터들 외의 상태코드 정보 가짐.

 

하나의 프로세스 내내 한 개 이상의 스레드가 존재할 수 있으며, 스레드의 실행은 서로 독립적으로 이루어지며, 같은 주소 메모리 내에서 다른 스레드와 협력을 동시 수행함으로써 프로세스의 일부분을 수행하게 된다. 따라서 스레드를 미니 프로세스와 같다고도 표현한다.

 

스레드의 장점 3가지

  • 스레드 간의 협력을 통한 병행성 증진
  • 메모리 공간을 보다 효율적으로 사용가능
  • 프로세스 생성 혹은 컨택스트 스위치 등의 오버헤드를 줄여 성능이 개선된다.

※ 프로세스 자체 생성 작업이 오래 걸리며 리소스도 많이 소모된다. 따라서  굳이 오버헤드를 감수하면서까지 프로세스를 여럿 만든  다는 것은 상당히 비효율적이다

 

단일 스레드 ( Single Thread )

말 그대로 1개 레지스터에 1개의 스택을 가지고 있으며, 공용 자원 접근 통제 및 콘텍스트 스위치 작업이 불필요하다는 장점이 있지만, 특성상 다른 프로세스 들과 메모리를 공유하지 못하며, 여러 개의 CPU활용이 어렵다는 단점이 있다.

 

이는 병렬로 작업을 할 수가 없다는 뜻으로, 요즘 같은 성능 좋은 컴퓨터에 어울리지 못한다.

따라서 이러한 큰 단점을 해결해 줄 멀티 스레드에 보다 주목할 필요가 있다.

 

멀티 스레드 ( Multi Thread )

위에서 언급했듯이, 프로세스 생성 작업은 오랜 시간 소요, 리소스 소모가 많은 등의 오버헤드 문제로 인해 상당한 작업의 비효율성을 초래한다.

멀티스레드 방식은 이러한 문제를 해결해 줄 수 있다. 하나의 프로세스를 다수의 실행단위로 나눠 실행하며, 각각의 스레드가 각각의 고유한 레지스터와 스택으로 표현함으로써, 자원의 생성 및 관리가 중복되는 것을 최소화할 수 있다.

 

각 스레드는 각각 독립적으로 동시 수행이 가능하며 다중 프로세서 시스템에서는 물론이거니와 단일 프로세스 시스템 상에서도 업무의 실질적인 다중 처리를 가능하게 한다.

 

중량 프로세스 (HWP : Heavy Weight Process )

단 1개의 스레드를 가진 프로세스로 표준 프로세스라고도 불린다. 다른 프로세스들과 메모리 공유를 하지 않는 독립성이 특징이다.

 

경량 프로세스 (LWP : Light Weight Process )

프로세스 내에 두 개 이상 스레드를 포함하고 있는 경우 각각의 스레드를 가리키는 것을 말하며, 위에서 언급한 바와 같이 같은 프로그램 코드 및 데이터, 시스템 자원들을 이용하며, 각각 고유의 프로그램 카운터, 레지스터, 스택 값을 가진다.

단일 프로세서상의 보통의 메모리 혹은 다중 프로세서 상의 단일 공유 메모리에서 실행된다.

 

스레드 실행 상태 변화

대기  : 실행이 부적합한 상태로 다른 스레드나 외부 프로세싱과 동기화 중에 상태이다.

준비 : 스레드 생성된 직후 초기 상태로 프로세서에 의해 실행될 수 있는 상태이다.

실행 : 현재 CPU를 가지고 있으며, 스케줄러에 의해 실행이 되는 상태

종료 : 실행 상태에서 시행된 작업 수행이 완전히 종료된 상태를 말한다.


 

프로세스의 제어 영역을 담당하는 스레드에 대해 알아보았다.

프로세스에 대한 전반적인 내용도 아래에 있으니 같이 참고하면 좋을 것 같다.

 

 

프로세스 개념 및 PCB, 문맥교환(Context Switching) 알아보기

프로세스란? 프로세스는 여러 가지로 정의될 수 있으며, 일반적으로 실행 중인 프로그램이라는 개념으로 가장 잘 알려져 있다. 프로세스와 프로그램의 비교 프로세스는 능동성(activeness)을 띄고

data-joony.com