본문 바로가기
[coroutine] Channels [coroutine] Channels https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/channels.md#channels Channel basics - Channel 은 BlockingQueue 와 매우 비슷한 개념이다. 한가지 큰 차이는 blocking 하는 put 대신 suspending function 인 send 가, blocking 하는 take 대신 suspending function 인 receive 가 있다는 것이다. fun main() = runBlocking{ val channel = Channel() launch{ for( x in 1..5) channel.send( x * x ) } repeat(5) { println(.. 2020. 3. 12.
[coroutine] Asyncronous Flow Representing multiple values -복수개의 값은 kotlin 에서 collection 을 사용하여 표현할 수 있다.fun foo() : List = listOf(1,2,3) fun main() { foo.forEach { value -> println(value) } } // 1 // 2 // 3 * Sequences -어떤 숫자를 계산하는데 CPU 를 blocking 하는 code 를 사용하고, 그 과정에 각각 100ms 가 걸린다면 우리는 이 숫자들을 Sequence 로 표현할 수 있다.fun foo() : Sequence = sequence{ // this 는 SequenceScope 이다. Sequence 는 coroutine 이 아닌 kotlin 의 것! for ( i in .. 2020. 3. 11.
[coroutine] Composing Suspending Functions ( suspending 함수 만들기 ) [coroutine] Composing Suspending Functions ( suspending 함수 만들기 ) https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/composing-suspending-functions.md#composing-suspending-functions Sequential by default - 2개의 suspending function 이 있다고 가정해보자. 그리고 그 두 개의 함수가 remote service call 이나 계산을 하는 등의 의미있는 행동을 하며, 시간이 좀 걸린다고 해보자. suspend fun doSomethingUsefulOne(): Int{ delay(1000L) // 의미있는 행동이라 가.. 2020. 3. 10.
[coroutine] Cancellation and Timeouts ( 취소와 타임아웃 ) [coroutine] Cancellation and Timeouts ( 취소와 타임아웃 ) https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/cancellation-and-timeouts.md#cancellation-and-timeouts Cancelling coroutine execution -오랜 시간 운영되는 앱의 경우 bg coroutine 을 잘 컨트롤 할 필요가 있다.예를 들어 user 가 coroutine 을 수행시킨 page 를 닫고, 해당 작업의 결과는 더 이상 필요없다면, 해당 작업을 취소시킬 필요가 있다."launch" 함수는 Job 을 return 하며, 이 녀석은 동작중인 coroutine 을 취소시킬 수 있다.fun m.. 2020. 3. 9.
[coroutine] coroutineScope 의 동작 특성을 알아보자. [coroutine] coroutineScope 의 동작 특성을 알아보자. - 아래 내용은 coroutine 에 대한 공부가 충분하지 않을 때 작성한 것이고, 22.10.13 기준 적당히 공부한 이후 한마디로 정리하면 아래와 같다. 더보기 coroutineScope 함수는 suspend function 으로 launch 등과 같은 coroutine builder 와는 다르다. suspend function 이므로 당연히 해당 함수 호출이 return 되어야 다음 구문이 실행된다. 그럼에도 아래 실험 결과들은 한번쯤 들여다볼만하다고 생각된다. - Coroutine 공식 가이드 문서에 있는 아래 샘플 결과를 보고 약간 멘붕에 빠졌다. 그래서 관련하여 실험한 결과를 여기에 정리해보고자 한다. fun main(.. 2020. 3. 8.
[coroutine] Coroutine Basics ( 코루틴 기초 ) https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/basics.md#coroutine-basics Your first coroutine - fun main(){ GlobalScope.launch{ delay(1000L) println("World!") } println("Hello,") Thread.sleep(2000L) } // Hello, // World! - 기본적으로 코루틴은 light-weight thread 이다. CoroutineScope 라는 context 안에서 "launch" 와 같은 coroutine builder 를 통해 시작된다. 위의 예제에서는 GlobalScope 라는 coroutine 을 사용해서 launch 를 했.. 2020. 3. 7.
Coroutine 과 놀아보기 #2 Coroutine 과 놀아보기 #2 - Coroutine 과 놀아보기 #1 과 마찬가지로 공부를 하면서 의아스러운 부분들을 테스트 코드를 통해 검증하며 정리한 글입니다.Coroutine 과 놀아보기 #1 - Job 이 cancel 되었을 때는 CancellationException 이 발생한다. 하지만, 이는 정상 동작으로 간주하여 coroutine 내에서는 crash 가 나진 않는다. ( runBlocking 안에서는 crash 가 난다.. runBlocking 은 따로 공부할 필요가 있다. ) - withTimeout 의 경우는 일단 synchronous 한 동작을 한다. (withContext 와 비슷하다.) 아래와 같은 코드가 있다면 어떤 로그도 찍히지 않는다. withTimeout(1000L){.. 2019. 5. 23.
Coroutine 과 놀아보기 #1 Coroutine 과 놀아보기 #1 - android studio 에서 coroutine 관련된 것들을 인식 못한다. android 3.2.1 버전으로 업그레이드 하니 해결되었다. 해당 버전 이상으로 환경 세팅을 하고 시작하자! - 이 글은 내가 coroutine 을 학습한 후에 약간 까리한 부분들을, 테스트 코드를 짜서 실험한 결과를 공유하는 글이다. runBlocking? 새로운 coroutine 을 수행하며, 작업이 끝날 때까지 현재 thread 를 block 시킨다. (interrupt 가능하다.) - 다음과 같은 테스트를 해보았다. btn.setOnClickListener{ runBlocking{ startLogPrinting() // mainHandler 에서 50ms 마다 “logPrinti.. 2019. 5. 22.
Coroutine first launch slow.. Coroutine first launch slow.. -android coroutine 1.1.1 기준 각 dispatcher 당 처음 launch 에 대해 매우 느린 현상이 있다. 예를 들어 GlobalScope.launch(Dispatchers.Main){ } 으로 코드를 실행시킬 경우 300ms 정도 이상이 걸리곤 한다.이는 first launch 에만 해당하며, 이후에는 process kill 되기 전까지는 0~1ms 의 속도를 낸다. -이는 각 dispatcher 별 첫 launch 에 모두 해당하며, Main 이 특히 오래 걸리고, 하나의 trial 이 다른 dispatcher 의 first launch 에 긍정적 영향은 미치지만, 그래도 여전히 오래 걸리는 이슈가 있다. -https://gi.. 2019. 4. 26.
반응형