6. 스레드 관리

수원 개발자·2024년 1월 12일
0

Operating System

목록 보기
6/6
post-thumbnail

스레드 = 실

프로세스의 스레드란 컴퓨터 프로그램이 작업을 수행하기 위해 사용하는 실행 경로의 가장 작은 단위이다. 간단히 말해서, 스레드는 프로세스 내에서 실제로 작업을 수행하는 부분이다.

프로세스와 스레드의 관계를 이해하려면 먼저 프로세스의 개념을 알아야 한다. 프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에서 할당된 자원(메모리, 파일 핸들 등)과 함께 실행된다. 각 프로세스는 최소 하나 이상의 스레드를 가지고 있으며, 이러한 스레드들은 프로세스가 할당받은 자원을 사용하여 작업을 수행한다.

프로세스와 스레드

목적을 이루는 작업을 하기 위해서는 자원을 할당받은 프로세스는 제어를 통해 원하는 목적을 이루는 과정이 있다. 이 중 제어 과정은 스레드와 큰 관련이 있다. 프로세스는 하난데 제어하는 것은 여러 개 있을 수 있다.

스레드

프로세스는 리소스를 제어하는 일을 한다. 리소스는 코드, 전역 데이터, 힙 영역이 있다. 프로세스는 제어 정보, 지역 데이터, 스택 영역 등이 있다.
스레드는 여기서 각각 제어를 할 수 있다.

  • 구성요소
  1. Thread ID
  2. Register set
  3. Stack

제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유

전통적 프로세스 = 단일 스레드 프로세스

스레드의 장점

  1. 사용자 응답성 : 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능.
  2. 자원 공유 : 자원을 공유해서 효율성 증가
  3. 경제성 : 프로세스의 생성, context switch에 비해 효율적
  4. 멀티 프로레서 활용 : 병렬 처리를 통해 성능 향상

컨텍스트 스위칭(Context Switching) 은 운영체제에서 멀티태스킹을 수행하기 위해 사용되는 프로세스, 쓰레드 간에 CPU 제어권을 전환하는 과정이다. 이 과정은 CPU가 현재 실행 중인 태스크(프로세스 또는 쓰레드)를 중지하고 다른 태스크를 실행하기 위해 발생한다. 컨텍스트 스위칭은 필수적인 과정이지만, 성능에 영향을 미칠 수 있다. 스위칭 과정에서는 실제 유용한 작업을 수행하지 않고 시스템 자원을 소모하기 때문이다.

스레드의 구현

  • 사용자 수준 스레드 (User thread)
  • 커널 수준 스레드 (Kernel Thread)

사용자 수준 스레드

  • 사용자 영역의 스레드 라이브러리로 구현됨.
  • 커널은 스레드의 존재를 모름 -> 커널의 관리를 받지 않는다. 단, 커널은 프로세스 단위로 자원 할당하기 때문에 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기한다.

커널 수준 스레드

  • OS가 직접 관리한다.
  • 커널 영역에서 스레드의 생성, 관리 수행 -> context switching 등 부하가 크다.
  • 커널이 각 스레드를 개별적으로 관리 -> 프로세스 내 스레드들이 병행 수행 가능 : 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능.

그렇기 때문에 장점만을 모은 다대다 스레드 모델을 구축했다.

혼합형 (다대다) 스레드

  • n개의 사용자 수준스레드와 m개의 커널 스레드 (N>=M)
    -> 사용자는 원하는 수만큼의 스레드를 사용하고 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능.

정리

스레드의 주요 특징은 다음과 같다:

  1. 경량 프로세스(Lightweight Process): 스레드는 프로세스보다 더 작은 실행 단위로, 프로세스 내에서 병렬로 실행될 수 있다.

  2. 자원 공유: 하나의 프로세스 내에 있는 스레드들은 그 프로세스의 메모리와 자원을 공유한다. 이는 스레드 간 통신을 용이하게 하지만, 동시에 데이터의 무결성 문제를 일으킬 수도 있다.

  3. 병렬 처리: 멀티 스레딩을 사용하면 여러 작업을 동시에 처리할 수 있어 프로그램의 효율성이 향상된다. 예를 들어, 웹 브라우저는 한 스레드에서 웹 페이지를 로드하는 동안 다른 스레드에서 사용자 입력을 처리할 수 있다.

  4. 컨텍스트 스위칭(Context Switching): 스레드 간의 컨텍스트 스위칭은 프로세스 간 스위칭보다 비용이 적게 든다. 이는 스레드가 프로세스의 자원을 공유하기 때문에 발생한다.

스레드를 효율적으로 사용하면 프로그램의 성능을 크게 향상시킬 수 있지만, 동시성 관리와 데이터 동기화에 주의해야 한다.

1개의 댓글

comment-user-thumbnail
2024년 1월 13일

스레드에 관해 자세하게 작성된 글이네요 화이팅입니다

답글 달기