시작하기에 앞서
Coroutine 과 Dispatcher 매우 간략하게..
맥북 M1 PRO (10 core 16 ram)
OS - MacOS Sequoia 15.5
CPU Bound 테스트를 위해 소수 찾기 알고리즘으로 10만회씩 진행
// 테스트 코드 일부 (Virtual Thread)
class VirtualThreadTest {
@Test
fun `CPU-BOUND TEST VT`() {
val executor = Executors.newVirtualThreadPerTaskExecutor()
MeasureUtils.measure {
val jobs = List(100_000) { // 10만회 실시
executor.submit { FindPrime.execute(10_000) } // 1만 이하의 소수 찾기
}
jobs.forEach { it.get() }
}
executor.shutdown()
}
}
각 모델별 4회차 평균 결과
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
CPU TIME : 실제 CPU 연산이 일어난 시간
Memory Usage : 테스트 시작 전후의 사용중인 힙 메모리 차
Heap Used after GC : 테스트 종료 후 GC로 회수되지 않고 남아있는 객체
(참고) Coroutine(FixedThreadPool) 의 스레드 개수는 **core 수 + 1**로 지정
</aside>
| 실행 모델 | 총 실행 시간 | CPU Time | Memory Usage | Heap Used after GC |
|---|---|---|---|---|
| Platform Thread | 1069.8 ms | 31.7 ms | 9.9 MB | 7.9 MB |
| Virtual Thread | 1133.6 ms | 93.6 ms | 34.7 MB | 11.1 MB |
| Coroutine | ||||
| (Dispatchers.Default) | 1191.3 ms | 176.9 ms | 48.2 MB | 19.1 MB |
| Coroutine | ||||
| (FixedThreadPool) | 1128.8 ms | 133.4 ms | 38.6 MB | 18.0 MB |
| Coroutine | ||||
| (Virtual Thread) | 1206.5 ms | 206.3 ms | 73.4 MB | 19.4 MB |