JAVA chapter12. 멀티 스레드. 12.3 스레드 우선순위
JAVA/CONCEPT 2017. 11. 29. 12:54 |12.3 스레드 우선순위
* 동시성과 병렬성
- 동시성
// 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아 가며 실행하는 성질
- 병렬성
// 멀티 작업을 위해 코어에서 개별 스레드를 동시에 실행하는 성질
* 스레드 스케줄링
- 스레드의 개수가 코어의 수보다 많을 경우
// 스레드를 어떤 순서로 동시성으로 실행할 것인가를 결정 -> 스레드 스케줄링
// 스레드 스케줄링에 의해 스레드들은 번갈아 가면서 그들의 run() 메소드를 조금씩 실행
* 자바의 스레드 스케쥴링
- 우선순위 방식과 순환할당 방식을 사용
// 우선순위 방식 (코드로 제어 가능)
: 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케쥴링하는 방식
// 순환할당 방식 (코드로 제어할 수 없음)
: 시간 할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행하는 방식
* 스레드 우선순위
- 스레드들이 동시성을 가질 경우 우선적으로 실행할 수 있는 순위
- 우선순위는 1(낮음)에서부터 10(높음)까지 부여
// 모든 스레드들은 기본적으로 5의 우선순위를 할당
- 우선순위 변경 방법
- 우선순위 효과
// 싱글코어 경우
: 동시성으로 실행될 경우, 우선순위가 높은 스레드가 실행 기회를 더 많이 가지기 때문에
: 우선순위가 낮은 스레드보다 계산 작업을 빨리 끝낸다.
// 멀티코어 경우
: 쿼드코어 경우에는 4개의 스레드가 병렬식으로 실행될 수 있기 때문에
: 4개 이하의 스레드를 실행할 경우에는 우선 순위 방식은 크게 영향을 미치지 못한다.
: 최소한 5개 이상의 스레드가 실행되어야 우선순위의 영향을 받는다
// 스레드 10개를 생성해서 20억 번의 루핑을 누가 더 빨리 끝내는가 테스트한 예제.
// Thread1~9는 우선순위를 가장 낮게 주었고, Thread10은 우선순위를 가장 높게 주었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | package sec03.exam01_priority; public class CalcThread extends Thread { public CalcThread(String name) { setName(name); // 스레드 이름 변경 } public void run() { // 스레드가 실행할 내용 for(int i=0; i<2000000000; i++) { } System.out.println(getName()); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package sec03.exam01_priority; public class PriorityExample { public static void main(String[] args) { for(int i=1; i<=10; i++) { Thread thread = new CalcThread("thread" + i); if(i != 10) { thread.setPriority(Thread.MIN_PRIORITY); // 우선순위를 가장 낮게 설정 } else { thread.setPriority(Thread.MAX_PRIORITY); // 우선순위를 가장 높게 설정 } thread.start(); } } } | cs |
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter12. 멀티 스레드. 12.5 스레드 상태 (0) | 2017.11.29 |
---|---|
JAVA chapter12. 멀티 스레드. 12.4 동기화 메소드와 동기화 블록 (0) | 2017.11.29 |
JAVA chapter12. 멀티스레드 12.1 멀티 스레드 개념. 12.2 작업 스레드 생성과 실행 (0) | 2017.11.28 |
JAVA chapter11. 기본 API 클래스. 11.16 java.time 패키지 (0) | 2017.11.28 |
JAVA chapter11. 기본 API 클래스. 11.15 Format 클래스 (0) | 2017.11.27 |