본문 바로가기
프로그래밍 놀이터/Kotlin

Coroutine first launch slow..

by 돼지왕왕돼지 2019. 4. 26.

Coroutine first launch slow..


1.2.0, android coroutine 1.1.1, coroutine 120, coroutine first launch slow, Coroutine first launch slow.., coroutine latest version, DIspatcher, dispatcher launch slow, first launch, Main, solution, 해결책


-

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 가 생기는지도 직접 확인도 해봐야하겠다.




댓글0