ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스레드 생명 주기 + 우선순위
    쓰레드/쓰레드 2022. 4. 3. 13:50

     

    스레드는 생성되어 소멸될 때까지 여러 형태의 생명주기를 가진다.

     

    스레드가 생성된 후의 상태는 크게 alived dead의 두 가지로 나누어진다.

     

    dead스레드가 자신의 run() 메소드를 완전히 수행하여 더 수행할 코드가 남아 있지 않거나 stop() 메소드에 의하여

              종료되는 경우

     

     나머지 모든 상태는 alive 상태인데 이 상태는 실행 가능 상태, 실행 상태, 대기 상태로 나눌 수 있다.

     

    실행 상태 실행 가능 상태 대기 상태
     스레드가 CPU를 차지하여 코드를
      수행 하는 단계
    Runnable pool이라고 하는 특정 장소에 실행 상태로 들어가기 위하여
    스레드들이
    모여있는 모습
     sleep pool, wait pool, join pool, I/O blocking pool 
     
     대기 상태에 있는 모든 스레드는 특정 조건을 만족하면 실행 가능 상태로 바뀌며 스케줄러를 통하여 실행 상태로 갈 수 있다.
     

     

    <스레드의 라이프 사이클>

     

    실행 가능 상태는 스레드가 CPU를 차지하여 실행 상태로 갈 수 있는 상황이다.

    실행 가능한 스레드들이 모여서 대기하는 장소 Runnable Pool이라고 한다.

    이곳에는 수많은 스레드들이 모여 서로 경쟁적으로 CPU를 차지하고 실행 상태로 들어갈 기회를 엿보고 있다.

    실행 상태로 들어갈 수있는 스레드는 1개이므로 나머지 스레드는 계속 Runnable Pool에서 대기

     

     

    스케줄러 :  실행 상태로 들어갈 수 있는 스레드를 선택하는 역할을 수행하는 것

                   (스케줄러는 JVM 안에서 수행되는 특별한 스레드)

     

    스레드의 라이프 사이클을 보면 실행 상태에서 대기 상태로 나오는 여러 가지 상황이 설정되어 있는데 각 상황별로 적용되는 메소드가 다르다.

     

    sleep() 메소드는 현재 실행중인 스레드를 Sleep Pool로 쫒아낸다.

    시간이 모두 경과되거나 사용자가 인터럽트를 호출하는 경우에 Sleep Pool에서 빠져나올 수 있으며 빠져나온 스레드는 실행 가능 상태가 되어 Runnable Pool로 들어간다.

    대부분 sleep() 메소드는 다른 스레드에게 실행 기회를 양보하기 위한 목적으로 쓰인다.


    우선순위

     

    운영체제는 CPU 의 실행시간을 아주 잘게(대략 0.02초) 쪼개어 스레드를 조금씩 순서대로 실행함으로써

    동시에 실행되는 것처럼 보이게 만든다. 

    시스템을 좀 더 효율적으로 운영하기 위해서는 

    스레드간 우선순위를 정해 긴급하고 사용자에 가까운 스레드에게 좀 더 많은 시간을 주는 것이 합리적

    스레드의 우선 순위는 우선 순위 클래스, 우선 순위 레벨 두 가지 조합으로 결정된다.

     

     

     

    우선 순위 클래스 우선 순위 레벨
    스레드를 소유한 프로세스의 우선 순위 프로세스 내에서 스레드의 우선 순위를 지정

    우선 순위 레벨은 다음 일곱 가지 중 하나이며 디폴트는 보통 우선 순위인 THREAD_PRIORITY_NORMAL 이다. 


    - THEREAD_PRIORITY_IDLE
    - THEREAD_PRIORITY_LOWEST
    - THEREAD_PRIORITY_BELOW_NORMAL
    - THEREAD_PRIORITY_NORMAL
    - THEREAD_PRIORITY_ABOVE_NORMAL
    - THEREAD_PRIORITY_HIGHEST
    - THEREAD_PRIORITY_TIME_CRITICAL



    댓글

Designed by Tistory.