coroutine
Coroutines와 Channels 튜토리얼 - 1. 시작하기 전 준비하기
이 튜토리얼에서는 IntelliJ IDEA를 사용해, 실행중인 Thread나 Callback을 블록하지 않고 코루틴을 사용하여 네트워크 요청을 수행하는 방법을 살펴볼 것이다. 📖 당신은 Kotlin 기초 구문에 익숙해야 하지만, Coroutines에 대한 사전 지식은 필요하지 않습니다. 당신은 다음의 사항들에 대해 배울 것입니다. 네트워크 요청을 하기 위해 일시 중단 함수를 왜 그리고 어떻게 사용해야 하는지 Coroutines을 사용하여 요청을 동시에 보낼 수 있는 방법 서로 다른 Coroutines 간에 Channels를 이용하여 정보를 공유하는 방법 네트워크 요청들을 위해서 Retrofit 라이브러리를 필요로 하지만, 이 튜토리얼에서 보여지는 접근 방식은 보편적이고 Coroutines를 지원하는 다른..
Coroutine 공유 상태와 동시성 1편 - Coroutine을 여러개 실행했을 때의 문제점, Volatile은 동시성 문제를 해결하지 못한다.
Coroutine은 Dispatchers.Default와 같이 멀티 스레드를 관리하는 Dispatcher에 의해 병렬적으로 실행될 수 있다. 이는 병렬 실행 시 일어날 수 있는 일반적인 문제들을 모두 만들어낸다. 가장 주요한 문제는 변경 가능한 공유 상태의 동기화이다. Coroutine에서 이 문제에 대한 일부 해결 방식은 멀티 스레드 세계에서의 해결방식과 유사하지만, 다른 해결 방식들은 Coroutine에만 있다. Coroutine을 여러개 실행했을 때의 문제점 같은 동작을 수천번 하는 수백개의 Coroutine을 실행한다고 하자. 이후의 추가 비교를 위해 완료 시간을 측정한다 : suspend fun massiveRun(action: suspend () -> Unit) { val n = 100 // ..
Coroutine 예외 처리 3편 - Supervision - SupervisorJob, SupervisionScope 사용해 예외 처리하기
Supervision 이전에 공부한 것처럼, 취소는 Coroutine의 전체 계층을 통해 전파되는 양방향 관계를 가진다.*1 단방향 취소만이 필요한 경우를 살펴보자. 이러한 요구사항에 대한 좋은 예제는 Scope 내부에 Job이 선언된 UI 구성요소이다. 만약 UI의 자식의 작업이 실패되더라도, 언제나 모든 UI 구성요소를 취소(효과적으로 종료)하는 것은 필수적이지 않다. 하지만, UI 구성요소가 파괴되면(그리고 그 Job이 취소되면), 더이상 결과값이 필요 없기 때문에 모든 자식 Job을 취소하는 것은 필수적이다. 다른 예시는 여러 자식 Job을 생성하고 이들의 실행이 감독*2되고 그들의 실패가 추적되어서 실패된 것들만 재시작 해야하는 서버 프로세스이다. Supervision job Supervisor..
Coroutine 예외 처리 2편 - Cancellation과 Exceptions, Exceptions 합치기
Cancellation과 Exceptions 취소는 예외와 밀접히 연관되어 있다. Coroutine은 내부적으로 취소를 위해 CancellationException을 사용하며, 이 예외는 모든 Handler에서 무시된다. 따라서 이들은 catch블록으로부터 얻을 수 있는 추가적인 디버그 정보를 위해서만 사용되어야 한다. Coroutine이 Job.cancel을 사용해 취소될 경우 종료되지만, 부모 Coroutine의 실행을 취소하지는 않는다. val job = launch { val child = launch { try { delay(Long.MAX_VALUE) } finally { println("Child is cancelled") } } yield() println("Cancelling child"..
Coroutine 예외 처리 1편 - Exception 전파, CoroutineExceptionHandler 사용해 전파된 예외 처리하기
이 섹션에서는 예외 처리와 예외 발생 시 취소에 대해 다룬다. 우리는 취소된 Coroutine이 일시중단 지점에서 CancellationException을 발생시키고 이것이 Coroutine의 동작원리에 의해서 무시되는 것을 알고 있다. 이 장에서는 취소 도중 예외가 발생되거나 같은 Coroutine에서 복수의 자식 Coroutine이 예외를 발생시킬 경우 어떤 일이 일어나는지 살펴볼 것이다. Exception 전파 Coroutine 빌더는 자동으로 예외를 전파(launch와 actor)하거나 사용자에게 예외를 노출(async와 produce)한다. 이 빌더들이 다른 Coroutine의 자식이 아닌 root Coroutine을 만드는데 사용될 때, 전자(launch와 actor)는 Java의 Thread..