⏱️ 5. 성능 평가 척도
앱 성능에 대한 두가지 기준 (지연 시간 & 처리량)
- 성능은 시나리오와 용례에 따라 완전히 다르게 측정될 수 있습니다.
- 병행 실행의 가지가 있는지 없는지는 다음 요소를 확인해 봐야한다.
① Latency (지연시간) : Data Parallelism
- 하나의 큰 작업을 SubTask로 나눠서 병렬로 진행할때 주로 사용한다
- Ex). 연산, 정렬, 분할정복
② Throughput (단위시간당 처리량) : Task parallelism
- 작업간 서로 별로 연관이 없는 독립적인 Job을 처리할때 사용함
- Ex). 비동기 I/O, 네트워크, DB
📄 1. 지연시간 (Latency) : 하나의 Task(작업)을 처리하는 시간
1). Optimize Latency
- 멀티 스레딩으로 지연시간의 최적화를 달성하는 방법으로 SubTask 기법이 있다.
바로 하나의 Task(작업)을 SubTask로 나눠서 병렬 처리하는 방법이다. - EX). 분할정복, 이미지 처리, CPU Bound
2). 사용 흐름
- 각 SubTask들은 다시 하나의 결과물로 만들기 위해 처리해야하는 Task(작업)이 존재한다.
1. Task 나누기, 2. Thread 생성 비용, 3. Thread에 Task(작업)을 전달하고 시작하는 비용, 4. 스케쥴링하여 Thread가 실행되기까지 시간, 5. 집계를 마친 신호를 기다리는 시간, 6. Main Thread가 재실행 되는데 까지 걸리는 시간, 7. SubTask들을 하나로 통합하는 비용
3). 이론상 향상 수치
- ,
- 이론상 N의 최대 크기는 CPU코어의 개수가 된다.
그리고 그 수를 넘어서게 된다면 오히려 성능 저하가 발생한다. - 그리고 모든 Thread가 인터럽트 없이 SubTask 실행해야 최적입니다.
다시 말해, 모든 Thread가 항상 runnable 상태여야 한다.- I/O나 모든 작업이 non-blocking이 되어야 한다는 뜻이다.
📄 2. 처리량 (Throughput) : 단일 시간당 처리 완료하는 일의 양
1). Optimize Throughput
- 멀티 스레딩으로 처리량 최적화를 달성하는 방법으로
- 만약 여러 Task(작업)들이 서로 연관이 별로 없어 결과물 처리작업을 몇가지 생략 할 수 있다면
그저 여러 Task(작업)들을 독립 처리하는 식으로 처리량 최적화가 가능하며, Thread Pool로 생성 비용을 최적화 하는것이 가능하다. - EX). HTTP Request, I/O Bound
2). 사용 흐름
- 지연시간 최적화와 다르게 이번 방법은 Task를 나누기&집계는 고려하지 않아도 된다.
1. Thread에 Task(작업)을 전달하고 시작하는 비용, 2. Thread 생성 비용, 3. 스케쥴링하여 Thread가 실행되기까지 시간,
- Thread 풀은 Thread의 생성 삭제에 발생하는 비용을 낮추기 위해 사용가능한 테크닉이고 다음 과정으로 Thread를 처리한다.
Thread는 생성되면 Pool에 쌓이게 되고 Task(작업)이 Queue를 통해 Thread 별로 분배가 된다 Thread는 이용 가능할때 마다 Queue를 통해 작업을 받는다.
3). 주의점
-
쉬운 코딩 : 큐에 요청이 무한정 쌓이게 되는지 큐의 사이즈를 확인해봐야 합니다.
상황에 따라 메모리를 고갈 시키는 잠재적인 위험 요인이 될 수 있습니다.
요청을 버리더라도 전체 시스템을 유지하는 방식을 택해야 할때도 있습니다.
📄 3. 하이퍼 스레딩
1). 떠올렸던 의문점.
CPU 코어(하드웨어)에 스레드 개수는 일반적으로 1개, 하이퍼 스레딩을 쓰면 2개
프로세스(소프트웨어)의 스레드 수는 250~1000개 이상의 스레드를 가질 수 있다.
이 문장이 말하는 바는 도데체 무엇일까?
2). "동시에 실행 가능한 작업 수" != "스레드 개수"
- 즉, 스레드 가 250~1000개가 된다 해서 요이땅! 하고 이 개수만큼 "동시에 처리"할 수는 없다! 즉, 스레드의 개수가 모두다 동시 처리된다 보장 못한다.
- 대기 상태로 존재하는 큐에 들어간 개수를 의미한다.
- CPU가 하나라도 놀게 되면 그때, FIFO로 스레드 교체함.
- 그럼 실제로 "동시에 처리되는 작업개수" 는 "CPU Core의 개수" 인것!
참고
'CS > OS' 카테고리의 다른 글
| 니앙팽이 - 멀티스레딩 | 6 | 스레드 (0) | 2025.01.18 |
---|---|
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙 (0) | 2025.01.18 |