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://github.com/Kotlin/kotlinx.coroutines/issues/878
kotlin coroutine 쪽 issue 를 보면 class load 하는데 시간을 보낸다는 등의 이야기가 있으며,
이를 해소하기 위해서 R8 에 미리 dispatcher 관련 service 를 load 하자는 등의 의견이 있지만, R8 은 이를 할 계획이 현재 없다는 등의 여러 가지 이야기가 있다.
그리고 결론적으로는 어떤 해결책을 주지 않는다.
-
결국 user 가 해결해야 하는데.. Application onCreate 에서 async 로 dummy launch 를 각 dispatcher 에 대해 한번씩 때려주는 것이 임시방편이 되겠다.
-
글의 초안을 작성하던 시점에는 issue #878 에 대한 뚜렷한 해결책이 없었다.
그런데 latest coroutine version 을 체크해보니 해당 이슈 중 Main dispatcher 에 대한 뚜렷한 성능개선 패치가 1.2.0-alpha 에 준비되었다.
1.2.0 버전의 정식 reelase 가 언제될지는 모르겠지만, 계속 주시해야겠다.
또한, release 가 되더라도 직접 테스트해서 얼마나 delay 가 생기는지도 직접 확인도 해봐야하겠다.
'프로그래밍 놀이터 > Kotlin, Coroutine' 카테고리의 다른 글
Coroutine 과 놀아보기 #2 (2) | 2019.05.23 |
---|---|
Coroutine 과 놀아보기 #1 (0) | 2019.05.22 |
[coroutine] java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. 'kotlinx-coroutines-android' (0) | 2019.03.06 |
[coroutine] exception 을 이해해보자 #2 ( in global scope ) (0) | 2019.03.06 |
[coroutine] exception 을 이해해보자 #1 ( in my coroutine scope ) (0) | 2019.03.05 |
댓글