스레드 스케줄링(Thread Scheduling), 스레드 스케줄링 방식, 스레드 스케줄러, 스레드 우선순위, , Thread 클래스의 우선순위를 정하는 멤버변수, 선점형 스레드 스케줄링 방식, 순환할당(Round-Robin)방..

CODEDRAGON Development/Java

반응형

 

 

스레드 스케줄링(Thread Scheduling)

스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성을 실행할 것인가를 결정해야 하는데 이것이 스레드 스케줄링입니다.

스레드 스케줄러에 의해 여러 스레드들이 아주 짧은 시간동안 번갈아가면서 스레드의 run()메소드를 조금씩 실행하게 됩니다.

 

 

스레드 스케줄링 방식

·       선점형 스레드 스케줄링 방식은 스레드의 우선권을 가지고 우선순위(Priority)가 높은 스레드를 먼저 수행시키는 방식입니다.

·       협력형 스레드 스케줄러는 실행중인 스레드가 CPU 사용권을 다른 스레드에게 넘길 때까지 기다리는 방식

·       JVM은 우선순위에 따른 선점형 스레드 스케줄링 방식을 사용하고 있습니다.

 

순환할당(Round-Robin)방식

우선순위 방식으로 순환할당(Round-Robin)방식이 있습니다. 순환할당방식은 시간 할당량(Time Slice)를 정해서 하나의 스레드를 정해진 시간만큼 실행하고 다시 다른 스레드를 실행시키는 방식입니다. 스레드 우선순위 방식은 스레드 객체에 우선순위를 부여하기 때문에 개발자가 코드를 제어할 수 있지만 순환 할당 방식은 자바의 가상머신(JVM)에 의해서 이루어지기 때문에 코드로 제어할 수 없습니다.

 

 

 

스레드 스케줄러

·       멀티 스레드가 수행될 때 어떤 스레드가 먼저 수행될지는 스레드 스케줄러가 결정하게 됩니다.

·       자바 애플리케이션에서는 우선순위가 높은 선점형 스레드 스케줄러를 사용하고 있습니다.

 

 

 

스레드 우선순위

·       우선순위는 1에서 부터 10까지 부여되어지는데 1이 가장 우선순위가 낮고, 10이 우선순위가 가장 높습니다.

·       우선순위가 높은 쓰레드의 실행을 우선시합니다.

·       우선순위를 부여하지 않으면 모든 스레드들은 기본적으로 5의 우선순위를 가지게 됩니다.

·       우선순위가 동일할 때는 CPU의 할당시간을 나누게 됩니다.

 

 

 

 

Thread 클래스의 우선순위를 정하는 멤버변수

Thread 클래스에서는 스레드의 우선순위를 부여하는 setPriority(int newPriority) 메서드를 가지고 있습니다.

Thread클래스에서 제공하는 setPriority()메소드와 getPriority()메소드를 이용하여 우선순위를 변경하거나 우선순위값을 가져올 수 있습니다.

상수값

설명

소스코드

static int MAX_PRIORITY

스레드가 가질 수 있는 최대 우선순위값(10)

setPriority(Thread.MAX_PRIORITY)

static int NORM_PRIORITY

스레드가 가질 수 있는 기본 우선순위(5)

setPriority(Thread.MIN_PRIORITY)

static int MIN_PRIORITY

스레드가 가질 수 있는 최소 우선순위(1)

setPriority(Thread.NORM_PRIORITY)

 

 

 

동일한 작업을 하는 스레드의 작업비교

구분

설명

싱글코어

싱글코어에서 동시성으로 실행할 경우 우선순위가 높은 스레드가 더 많은 실행기회를 가지기 때문에 우선순위가 낮은 스레드보다 먼저 계산 작업을 종료하게 됩니다.

쿼드코어

쿼드코어에서 작업할 경우 4개의 스레드가 병렬성 작업을 수행하기 때문에 4개 이하의 스레드를 실행할 경우 우선순위의 크게 영향을 받지 않습니다. 최소한 5개 이상의 스레드가 실행되어야 우선순위의 영향을 받습니다.

 

 

반응형