일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kotlin querydsl
- kotlin spring
- 정보처리기사 실기
- CloudWatch
- 정보처리기사실기 기출문제
- mysql 튜닝
- AWS EKS
- 기록으로 실력을 쌓자
- minikube
- Pinpoint
- 공부
- CKA 기출문제
- Linux
- Kubernetes
- aws
- 티스토리챌린지
- 정보처리기사 실기 기출문제
- Java
- APM
- Elasticsearch
- 코틀린 코루틴의 정석
- Spring
- IntelliJ
- AI
- CKA
- kotlin coroutine
- 오블완
- MySQL
- PETERICA
- kotlin
- Today
- Total
피터의 개발이야기
[kotlin] 코틀린 코루틴의 정석 - 코루틴의 동작 원리(Coroutine과 Continuation) 본문
[kotlin] 코틀린 코루틴의 정석 - 코루틴의 동작 원리(Coroutine과 Continuation)
기록하는 백앤드개발자 2024. 6. 13. 10:10ㅁ 들어가며
ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.
11장 코루틴의 심화 - Coroutine의 내부동작 원리
ㅇ Coroutine의 동작 원리는 작업의 중단과 재시작에 방식에 있다.
ㅇ 이 주제에 관해서는 [JAVA] JDK21, Virtual Thread, Continuation에 대한 이해에서 이야기를 하였다.
ㄴ Coroutine의 비동기의 핵심은 작업의 중단 및 재시작하는 runContinuation 작업이다.
ㄴ Continuation을 더 깊이 이해하기 위해서는 LockSupport.park로 기존 스레드의 중지 재시작 메커니즘을 이해해야한다.
Continuation Passing Style
ㅇ 코틀린의 내부동작 원리인 코루틴의 일시 중단과 재개를 위해 Continuation 객체를 사용한다.
ㅇ 이러한 방식을 Continuation Passing Style이라 하며, 풀이하면 Continuation을 전달하는 스타일이라는 뜻이다.
ㅇ Continuation 객체를 사용해 코루틴이 일시 중단 시 수행 정보를 저장하고, 재개 시 저장된 정보를 로딩해 코루틴을 다시 실행한다.
일시 중단과 재개를 위한 Continuation
fun main() = runBlocking<Unit> {
println("main 코루틴 실행")
// 수작업으로 coroutine을 일시 중단하는 로직
suspendCancellableCoroutine<Unit> { continuation: CancellableContinuation<Unit> ->
println("일시 중단 시점의 runBlocking 코루틴 실행 정보: ${continuation.context}")
continuation.resume(Unit) // 코루틴 중단이 재개됨.
}
println("main 코루틴 완료")
}
/*
main 코루틴 실행
일시 중단 시점의 runBlocking 코루틴 실행 정보: [CoroutineId(1), "coroutine#1":BlockingCoroutine{Active}@3b084709, BlockingEventLoop@3224f60b]
main 코루틴 완료
Process finished with exit code 0
*/
ㅇ 코루틴이 중단되면 Coninuation에 실행정보가 저장되고, continuation.resume을 통해 재개된다.
ㅇ 코루틴 라이브러리의 고수준 API는 Continuation 객체를 외부로 노출하지 않기 때문에 일반 코드에서는 Continuation을 쉽게 사용할 수 없다.
ㅇ 그나마 사용할 수 있는 저수준 API인 suspendCancellableCoroutine 함수를 사용해 Continuaiton 객체를 직접 다루는 코드를 만들 수 있다.
ㅁ 함께 보면 좋은 사이트
'Programming > Kotlin' 카테고리의 다른 글
Ktor란? (0) | 2024.06.19 |
---|---|
[kotlin] 코틀린 코루틴의 정석 - 무제한 디스패처(Unconfined Dispatcher) (0) | 2024.06.14 |
[kotlin] 코틀린 코루틴 디버깅 옵션설정 방법 (0) | 2024.06.12 |
[kotlin] 코틀린 코루틴의 정석 - CoroutineScope의 start 옵션 (0) | 2024.06.10 |
[kotlin] 코틀린 코루틴의 정석 - 비동기 다중 스레드 시 공유 데이터 정합성 문제 (1) | 2024.06.08 |