"프로세스 내부에 CPU 수행 단위가 여러 개 있는 경우 CPU 수행 단위를 쓰레드라고 부른다."

쓰레드, 경량 프로세스라고 불리는 개념은 프로세스에 비해 다소 난해합니다. 그도 그럴것이 쓰레드는 프로세스보다 좀 더 나중에 기술이 발전되며 등장한 개념이기 때문입니다.

쓰레드는 쉽게 얘기하면 CPU 실행 단위를 의미합니다. 프로세스는 code, data, stack, heap의 메모리 공간을 요구합니다. 각각의 메모리공간에 프로세스 실행에 필요한 개념이 들어가죠.

process의 어떤 부분을 실행해야 하는가에 대한 정보는 Program Counter라는 레지스터에 등록되어 있습니다. 쓰레드는 이러한 program Counter를 쓰레드별로 갖고 있어 프로세스의 다양한 실행 단위를 가져갈 수 있도록 합니다.

CPU가 실행 단위를 수행하며 함수 호출이 필요하므로 함수 호출과 관련된 스택은 쓰레드별로 필요합니다.
그러나 이렇게 쓰레드 별로 필요한(CPU 실행 단위를 위해 필요한) 영역이 아닌 경우, 프로세스에서 공유할 자원을 최대한 공유합니다.

즉, 쓰레드는 Program Counter, CPU실행 관련 register, stack등 CPU 수행과 관련된 정보만 별도로 갖고 있습니다.

쓰레드의 구성

쓰레드는 크게 3가지로 구성되어 있습니다.

  • Program Counter
  • register set
  • stack space

반면 아래의 부분들은 process내의 동료 thread와 공유합니다.

  • code section
  • data section
  • OS resource

이렇게 쓰레드는 경량 프로세스라고 불리며, 전통적 개념의 heavy weight process는 단일 쓰레드 task로 볼 수 있습니다.

쓰레드의 장점

1. 응답성

프로세스 내의 쓰레드가 여러 개 존재하면, 하나의 쓰레드가 block되어도 다른 쓰레드가 계속 CPU에서 실행될 수 있습니다. 웹 브라우저가 리소스 응답을 기다리며 텍스트를 렌더링하고 사용자와 상호작용이 가능한 것을 예로 들 수 있습니다.

2.효율성

자원 공유로 인해 리소스가 절약됩니다. 또한 프로세스보다 쓰레드의 생성/스위칭이 더 빠릅니다. (solaris 기준으로 overhead가 각각 30배, 5배 차이가 납니다)

3. 실행 단위를 여러 개 만들어 병렬성이 늘어납니다.

자원을 공유하며 실행 단위를 여러 개 사용할 수 있습니다.

4. Utilization of MP Architectures

멀티 프로세스 환경에서 하나의 프로세스 내부의 쓰레드가 서로 다른 Processor에서 실행될 수 있습니다.

5. Throughput

동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상이 가능합니다.

쓰레드의 생성 방법

쓰레드는 생성 방법에 따라 kernal thread와 user thread로 나뉩니다.

kernal thread

커널에서 쓰레드를 생성하는 방법으로, 쓰레드의 존재를 커널이 알고 있습니다. (서로 다른 쓰레드 임을 인식합니다)

user thread

라이브러리 등으로 유저 프로그램에서 실행 단위를 쓰레드로 관리합니다. 커널에서 쓰레드의 존재를 알지 못하고 하나의 프로세스로 인식합니다.

출저

profile
웹 개발을 공부하고 있는 윤석주입니다.

0개의 댓글