공식 문서 번역
Coroutine Context와 Dispatcher 2편 - Coroutines와 Threads 디버깅 하기 : IntelliJ 사용, 로깅 사용
Coroutines와 Threads 디버깅 하기 Coroutines는 하나의 스레드에서 일시 중단한 다음 다른 스레드에서 재개될 수 있다. 싱글 스레드를 가진 Dispatcher에서도 특별한 도구가 없으면 Coroutine이 언제, 어디서 무엇을 하는지 알기 어렵다.*1 IDEA를 사용해 디버깅 하기 Kotlin Plugin인 Coroutine Debugger은 Intellij IDEA에서 Coroutines 디버깅을 간단하게 할 수 있도록 한다. 📍 디버깅은 kotlinx-coroutines-core 1.3.8 혹은 그 이후 버전에서부터만 동작한다. Debug tool window는 Coroutines 탭을 포함한다. 이 탭에서 현재 실행 중이거나 일시 중단된 Coroutine 모두에 대한 정보를 확인..
Coroutine Context와 Dispatcher 1편 - Dispatchers와 Threads, Unconfined vs confined dispatcher
Coroutines는 언제나 Kotlin 표준 라이브러리에 정의된 CoroutineContext 타입 값으로 표현되는 일부 Context 상에서 실행된다. Coroutine의 Context는 다양한 요소의 집합이다. 주요 요소는 이전 섹션에서 본 Coroutine의 Job과 이번 섹션에서 다룰 Dispatcher이다. Dispatchers와 Threads Coroutine Context에는 해당 Coroutine의 실행에 사용되는 단일 스레드나 복수의 스레드를 결정하는 CoroutineDispatcher(CoroutineDispatcher 문서를 확인)가 포함 된다. Coroutine Dispatcher은 Coroutine의 실행될 사용될 스레드를 특정 스레드로 제한하거나 스레드풀에 분배하거나, 제한 없..
Coroutines 일시중단 함수 구성하기 2편 - 비동기 스타일 함수, 구조화된 동시성과 async
비동기 스타일 함수 구조적인 동시성에서 벗어나기 위해 GlobalScope를 참조하는 async Coroutine Builder을 사용하여 doSomethingUsefulOne 및 doSomethingUsefulTwo을 실행하는 비동기 스타일의 함수를 정의할 수 있다. 이러한 함수들의 이름은 "...Async"를 접미사를 가지도록 하여, 함수들이 비동기 계산을 시작하기만 하고 결괏값을 얻기 위해 Deffered 값을 사용해야 한다는 것을 강조한다. 📖 GlobalScope는 사소하지 않은 역효과를 일으킬 수 있는 섬세하게 다뤄야 하는 API이다. 그 중 하나는 아래에서 설명될 것이며, 명시적으로 GlobalScope를 @OptIn(DelicateCoroutinesApi::class)과 함께 사용되도록 해..
Coroutines 일시중단 함수 구성하기 1편 - 기본적인 순차 처리, async를 사용한 동시성, async lazy하게 시작하기
이 섹션은 일시 중단 함수를 구성하기 위한 다양한 접근 방식을 다룬다. 기본적인 순차 처리 일종의 원격 서비스 호출이나 계산 같은 두 유용한 일시 중단 함수들이 서로 다른 위치에 정의되어 있다고 가정해보자. 이들은 유용한척 하지만 실제로는 이 예제의 목적을 위해 1초간 delay가 일어난다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are doing something useful here return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // pretend we are doing something useful here, too return 29 } 먼저 ..
Coroutines 실행 시간 제한하기 - Timeout, 비동기 Timeout과 리소스
Timeout Coroutine의 실행을 취소하는 가장 명백하고 실용적인 이유는 실행 시간이 Timeout으로 설정한 시간을 넘어섰기 때문이다. 해당 Job에 대한 참조를 만들고 새로운 별도의 Coroutine을 실행해서 일정 시간 이후에 참조된 Job을 취소하는 과정을 거칠 수 있지만, 이러한 동작을 수행하는 withTimeout가 이미 만들어져 있다. 다음 예를 보자. import kotlinx.coroutines.* fun main() = runBlocking { withTimeout(1300L) { repeat(1000) { i -> println("I'm sleeping $i ...") delay(500L) } } } 📌 전체 코드는 이곳에서 확인할 수 있습니다. 위 코드는 다음을 출력한다. I..