자바 Thread_13
작업당 스레드 / 요청당 스레드
자바 스레드12의 내용와 이어지는 내용으로 꼭 두 개의 글을 같이 봐야함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 실행할 작업의 수
private static final int NUMBER_OF_TASK = 1000;
public static void main(String[] args) {
System.out.println("Enter to start");
Scanner sc = new Scanner(System.in);
sc.nextLine();
long start = System.currentTimeMillis();
performTask();
System.out.println("task from Thread: " + (System.currentTimeMillis() - start));
}
private static void performTask() {
// 동적 스레드풀
// 작업을 완료하는데 필요한 스레드를 계속 생성하고 캐시로 저장해 나중에 재사용함 (현실적 - 작업량이 얼마나인지 모르고, 몇 개의 스레드를 미리 할당해야할지도 모름)
ExecutorService executorService = Executors.newCashedThreadPool();
// 최대 스레드풀의 최대 숫자를 정할 수 있음
//ExecutorService executorService = Executors.newFixedThreadPool(1000);
for (int i = 0; i < NUMBER_OF_TASK; i++) {
// 반복할때마다 스레드 풀에 있는 스레드중 하나에서 새로운 작업이 실행됨
//executorService.submit(() -> blockingIoOperation());
// 작업 하나당 블로킹을 호출하는게 아니라,블로킹 호출을 100번 실행함(10ms x 100 = 1000ms)
executorService.submit(new Runnable() {
@Override
public void run() {
for (int j = 0; j < 100; j++) {
blockingIoOperation();
}
}
});
}
executorService.shutdown();
}
private static void blockingIoOperation() {
System.out.println("블로킹 스레드 - " + Thread.currentThread());
try {
Thread.sleep(10);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
- 100번의 블로킹 연산을 통해 99번의 context switch가 일어남
- 컨텍스트 스위치로 인해 발생하는 부하는 생각보다 많은 시간을 소모하고 실제 예상한 1000ms보다 시간이 더 걸림.
- 장점은 작업 단위 스레드 모델이 성능과 H/W 성능 향상됨
- 모든 작업을 동시에 수행이 가능하고 작업 속도가 빠름(코어수 == 스레드수 보다 더 빠름)
- 단점은 스레드가 비용이 큰 리소스
- 생성할 수 있는 스레드수는 제한적임
- 블로킹 호출 대기만 해도 스택메모리와 다른 자원을 소모함
- 스레드를 많이 할당하면 충돌함, 작게 할당하면 원하는만큼 처리량이 안나옴(CPU를 효율적으로 사용못함)
컨텍스트 스위치 비용
- OS는 CPU를 효율적으로 쓸려고 노력함
- 블로킹을 감지하면 차단된 스레드의 스케줄링을 취소하고 진행가능한 다른 스레드를 찾음
스레싱
- OS가 시스템을 관리하는데 CPU 자원 대부분을 소모하고 그 다음에 스레드가 작업을 하는 상황을 스레싱이라 함(피해야하는 상황!!!)
출처 - https://kmooc.udemy.com/course/java-multi-threading/ (Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기 )
This post is licensed under CC BY 4.0 by the author.