목록Book/Kotlin Coroutines Deep Dive (21)
시배's Android
코틀린 언어에서 자체적으로 지원하는 부분(컴파일러의 지원과 코틀린 기본 라이브러리 요소)과 코틀린 코루틴 라이브러리(kotlinx.coroutines)로 구성되어 있습니다. 언어 차원에서 지원하는 것과는 별개로 kotlinx.coroutines 라이브러리가 있습니다. 이 라이브러리를 사용하려면 프로젝트에 별도로 의존성을 추가해야 합니다. 언어 차원에서의 지원 kotlinx.coroutines 라이브러리 컴파일러가 지원하며 코틀린 기본 라이브러리에 포함되어 있다. 의존성을 별도로 추가해야 한다. kotlin.coroutines 패키지에 포함되어 있다. kotlinx.coroutines 패키지에 포함되어 있다. Continuation 또는 suspendCoroutines과 같은 몇몇 기본적인 것들과 susp..
중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신과 비슷합니다. 컨티뉴에이션 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있습니다. 함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장삭합니다. 그 결과, 모든 컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다. Continuation Passing Style suspend fun getUser() : User? suspend fun setUser(user : User) fun getUser(continuation : Continuation) : Any? fun setUser(user : User, continuation : Cont..
중단 코루틴은 중단되었을 때 Continuation 객체를 반환합니다. Continuation을 이용하면 멈췄던 곳에서 다시 코루틴을 실행할 수 있습니다. 스레드는 저장이 불가능하고 멈추는 것만 가능합니다. 코루틴은 다른 스레드에서 시작할 수 있고, 컨티뉴에이션 객체는 (이론상) 직렬화와 역직렬화가 가능하며 다시 실행될 수 있습니다. 재개 중단 함수는 말 그대로 코루틴을 중단할 수 있는 함수입니다. 이는 중단 함수가 반드시 코루틴(또는 다른 중단 함수)에 의해 호출되어야 함을 의미합니다. ScheduledExecutorService를 통해 특정 시간 이후에 중단을 멈추고 재개할 수 있도록 할 수 있습니다. private val executor = Executors.newSingleThreadSchedu..
코틀린의 시퀀스는 List나 Set과 같은 컬렉션이랑 비슷한 개념이지만, 필요할 때마다 값을 하나씩 계산하는 지연 처리를 합니다. 요구되는 연산을 최소한으로 수행합니다. 무한정이 될 수 있습니다. 메모리 사용이 효율적입니다. val seq = sequence { yield(1) yield(2) yield(3) } fun main() { for (num in seq) { print(num) } } 인자는 수신 객체 지정 람다 함수입니다 (suspend SequenceScope() -> Unit) 람다 내부에서 수신 객체인 this는 SequenceScope를 가리킵니다. 중단을 지원하는 스레드로 처리하려면 유지하고 관리하는데 막대한 비용이 듭니다. val fibonacci : Sequence = sequ..
fun onCreate() { val new = getNewsFromApi() val sortedNews = news .sortedByDescending { it.publishedAt } view.showNews( sortedNews ) } 안드로이드에서는 하나의 앱에서 뷰를 다루는 스레드가 단 하나만 존재합니다. 이 스레드는 앱에서 가장 중요한 스레드라 블로킹되면 안 되기 때문에, 이런 방법으로 구현할 수 없습니다. 스레드 전환 : 블로킹이 가능한 스레드를 먼저 사용하고, 이후에 메인 스레드로 전환하면 된다. 스레드가 실행되었을 때 멈출 수 있는 방법이 없어 메모리 누수로 이어질 수 있습니다. 스레드를 많이 생성하면 비용이 많이 듭니다. 스레드를 자주 전환하면 복잡도를 증가시키며 관리하기도 어렵습니다...