본문 바로가기

Java 공부

12장 스레드 우선순위

스레드 우선순위를 살펴보기 전에 동시성과 병렬성에 대해 살펴본다.


동시성 ( Concurrency )

멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질

ex) 코어1 - 스레드1, 스레드2, 스레드3 

      하나의 코어는 한시점에서 하나의 스레드만 실행할 수 있다.

      따라서 스레드1 조금 실행시켜놓고, 그다음 스레드2를 조금 실행시키고, 이런식으로 번갈아가며 스레드를 실행시킨다.

     하나의 코어가 하나의 스레드를 실행할 때, 다른 스레드들은 대기상태에 있다


병렬성 ( Parallelism )

멀티작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질

ex) 코어1 - 스레드1,  코어2-스레드2

   CPU에 두개의 연산장치가 있는것 

    각 코어에서 스레드를 실행시키기 때문에 실행에 방해를 받지 않고 진행할 수 있기 때문에 처리속도가 빠르다


스레드 스케쥴링


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

처음 스레드를 생성하게 되면 모든 스레드들은 실행 대기 상태에 있게 된다.     * 실행 대기 상태: 실행을 하기 위해 기다리는 상태

이후 스케줄링에 의해서 스레드가 선택되면 실행이 된다.

스레드가 선택되어 실행되어 질때, 해당 스레드 run()메소드를 모두 끝까지 실행되는게 아니라 조금씩 실행되어 진다.

스레드1 일부 실행 -> 스레드1 실행 대기상태 & 스레드 2 일부 실행 -> 스레드 2 실행대기상태 & 스레드3 일부 실행   : 과정 반복


자바는 두가지 방식으로 스레드 스케줄링을 한다.

-우선 순위 방식 (코드로 제어 가능)

  우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링 하는 방식

-순환 할당 방식 (코드로 제어할 수 없음)

  시간 할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행하는 방식


스레드 우선 순위 

-스레드들이 동시성을 가질 경우 우선적으로 실행할 수 있는 순위

-우선 순위는 1(낮음)에서부터 10(높음)까지 부여

-모든 스레드들은 기본적으로 5의 우선 순위를 할당 받는다.

-우선 순위 변경 방법

thread.setPriority(우선순위);   //정수값으로 직접 줘도 되고,


//스레드의 상수를 사용해도 된다.

thread.setPriority(Thread.MAX_PRIORITY);    //10

thread.setPriority(Thread.NORM_PRIORITY);  //5

thread.setPriority(Thread.MIN_PRIORITY);    //1


우선 순위 효과

-싱글 코어 경우

  우선 순위가 높은 스레드가 실행 기회를 더 많이 가지기 때문에 우선 순위가 낮은 스레드보다 계산 작업을 빨리 끝낸다.

-멀티 코어 경우

 쿼드 코어 경우에는 4개의 스레드가 병렬성으로 실행될 수 있기 때문에 4개 이하의 스레드를 실행할 경우에는 우선 순위 방식은 크게 영향을 미치지 못한다.

최소한 5개 이상의 스레드가 실행되어야 우선 순위의 영향을 받는다.




본 포스팅은 이것이 자바다 책을 참고하여 작성하였습니다.

'Java 공부' 카테고리의 다른 글

12장 스레드 상태  (0) 2018.12.03
12장 동기화 메소드와 동기화 블록  (0) 2018.12.02
12장 작업 스레드 생성과 실행  (0) 2018.12.02
11장 API정리_String클래스  (0) 2018.12.01
11장 API정리_Class클래스  (0) 2018.12.01