[CS/운영체제] 스레드기초 - 3부

황제연·2025년 6월 20일
0

CS학습

목록 보기
111/193

Thread State란?

스레드는 7가지 상태를 가집니다
스레드의 상태를 정확히 알고 있어야 하는데, 스레드의 행동을 직접 제어할 경우가 있기 때문입니다

멀티 스레딩 환경에서 자원에 비해 사용해야하는 스레드 수가 많다면, 이를 통제하기 위해
Thread State의 상태를 변경해야 합니다

대표적인 7가지 Thread State는 다음과 같습니다

  • New (생성됨)
  • Runnable (실행 가능)
  • Running (실행 중)
  • Blocked (차단됨)
  • Waiting (대기)
  • Timed Waiting (시간 제한 대기)
  • Terminated (종료됨)

New (생성됨)

스레드가 생성되었으나 아직 시작되지 않은 초기 상태입니다
스레드 객체는 생성되었지만, 스케줄러에 의해 아직 실행 가능한 상태로 전환되지 않은 시점입니다

Runnable (실행 가능)

Runnable 상태는 스레드가 CPU 할당을 기다리고 있는 상태입니다
OS의 스케줄러는 이 상태의 스레드 중 하나를 선택해 Running 상태로 전환합니다

  • 대기열(queue): Runnable 상태의 스레드들은 CPU 사용 권한을 얻기 위해 대기열에 위치합니다
  • 우선순위(priority): 스레드는 우선순위에 따라 선택적으로 실행됩니다
    높은 우선순위의 스레드가 일반적으로 먼저 실행된다

Running (실행 중)

스레드가 CPU를 할당받아 실제로 실행 중인 상태입니다
이 상태에서 스레드는 실제 작업을 수행하게 됩니다
실행 중인 스레드는 다음과 같은 이유로 다른 상태로 전환될 수 있습니다

  • 시간 할당량 만료(time-slicing)
  • IO 작업 요청
  • 동기화 자원 요청(락)

Blocked (차단됨)

Blocked 상태는 스레드가 필요한 자원(주로 동기화된 자원)을 기다리고 있는 상태입니다
다른 스레드가 해당 자원을 사용 중이면, 스레드는 자원이 해제될 때까지 차단됩니다

예시:

  • synchronized 블록이나 메서드를 통한 동기화(lock)

Waiting (대기)

스레드가 다른 스레드로부터 특정 신호(notify, notifyAll)를 받을 때까지 무기한 기다리는 상태입니다
이 상태에서는 특정 이벤트가 발생할 때까지 절대적으로 실행되지 않습니다

예:

  • Object.wait() 메서드
  • Thread.join() 메서드

Timed Waiting (시간 제한 대기)

지정된 시간이 경과하거나 특정 이벤트가 발생할 때까지 스레드가 일시적으로 대기 상태에 놓이는 상태입니다

예:

  • Thread.sleep(millis)
  • Object.wait(millis)
  • LockSupport.parkNanos(nanos)

Terminated (종료됨)

스레드가 모든 작업을 완료하거나 예외로 인해 종료된 상태입니다
이 상태에 도달하면 더 이상 다시 시작할 수 없습니다

상태 전이(Transition) 흐름

스레드는 다음과 같은 흐름을 따라 상태가 전환됩니다:

  • 스레드는 start() 메서드를 통해 New에서 Runnable로 전환됩니다
  • 스케줄러가 Runnable 상태의 스레드를 선택하면 Running 상태로 이동합니다
  • Running 상태의 스레드는 작업이 끝나면 Terminated 상태로 전환됩니다
  • Running 상태의 스레드는 자원 요청, IO 요청 등으로 Blocked나 Waiting 상태로 이동할 수 있습니다

성능영향과 관리

스레드 상태 관리는 성능에 큰 영향을 미칠 수 있습니다
불필요한 스레드 상태 전이는 Context Switching 비용을 발생시키며, 성능 저하를 발생시킵니다
따라서 다음과 같은 최적화 전략이 필요합니다

  • 불필요한 동기화 제거
  • 적절한 스레드 풀(thread pool) 사용
  • 과도한 상태 전환 방지
profile
Software Developer

0개의 댓글