상세 컨텐츠

본문 제목

[Java] 멀티스레딩 - 스레드 스케줄링(Thread Scheduling), 동적 우선순위(Dynamic Priority)

JAVA&Spring

by 정혜리 2022. 8. 28. 00:47

본문

프로세스, 스레드, 컨텍스트 스위치의 기본 개념은 아래 게시글 참고

2022.08.28 - [JAVA] - [Java] 멀티 스레딩 - 프로세스(Process), 스레드(Thread), 컨텍스트 스위치(Context Switch)

 

[Java] 멀티 스레딩 - 기본 개념 (Process, Thread)

시스템 기본 동작 방식 - Process, Thread 각종 운영체제와 어플리케이션은 파일의 형태로 저장되어 있다. 컴퓨터 실행 시 운영체제(Operating System)가 디스크에서 메모리로 로드되고 운영체제는 사용

hyeristory.tistory.com

 


1.  스레드 스케줄링(Thread Sheduling)

각 스레드의 도착 시간과 작업 시간이 정해진 경우 스케줄링 비교

 

1. First Come First Server

: 도착한 순서대로 실행

[문제점]
- 작업 시간이 긴 스레드가 먼저 도착 시 다른 스레드의 *기아현상 발생

- 특히 UI 스레드의 지연 시 어플리케이션의 응답성 방해하여 사용성에 최악임

 

* 기아현상

:  작업시간이 짧은 스레드가 작업시간이 긴 스레드에 의해 실행되지 못하는 상태

 

 

 

2. Shortest Job First

: 작업시간이 짧은 스레드를 먼저 실행

[문제점]

- 작업 시간이 짧은 UI 이벤트는 자주 발생되어 계속 앞에 배치

- 연산이 필요한 긴 스레드는 영원히 실행하지 못함

 

 

위와 같은 문제점으로 인해 평등하게 스레드를 분배해서는 안된다.

이제 일반적으로 운영체제에서 사용하는 방법을 확인해보자.

 

3. 일반적인 운영체제 방법 - Epochs, Time Slice

: *에포크에 맞춰 시간을 적당한 크기로 나누고 스레드를 시간단위로 나누어 종류별로 에포크에 할당

운영체제가 에포크에 맞게 시간을 적절히 나누고 스레드의 타임 슬라이스를 각 에포크에 할당한다.

모든 스레드가 에포크에 할당되어 실행되거나 완료되지 않는데, 운영체제가 각 스레드에 동적 우선순위를 적용해 시간을 할당한다. 

 

* 에포크(Epoch, = Unix Time)

: 1970년 1월 1일 00:00:00 UTC 부터 현재까지 누적된 초의 값, Unix를 개발한 벨 연구소에서 정의하여 Unix Time이라고도함

ex) JAVA의 System.currentTimeMillis()

 

 

2. 동적 우선순위(Dynamic Priority)

: 정적 우선순위 (Static Priority) + 보너스(Bonus)

  • 정적 우선순위 : 개발자가 미리 설정해둔 우선순위
  • 보너스 : 운영체제가 각각의 에포크마다 조절 (실시간 스레드, 인터렉티브 스레드, 이전 에포크에서 완료 못한 스레드에게 우선권 부여)

=> 즉각적인 반응으로 응답성을 높이고, 기아 현상을 막는다.

 

 

관련글 더보기