Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Anaconda
- 딥러닝
- Android IDE
- 파이썬
- Schedule
- generics
- data class
- 안드로이드 스튜디오 설치
- 파이참
- Kotlin
- 안드로이드 스튜디오
- android studio
- 객체지향
- GC
- 안드로이드
- cache
- jvm
- GIT
- aging
- android studio 설치
- 크롤링
- InteliJ
- fixedRateTimer
- Android
- sealed class
- jsoup
- process
- thread pool
- PyCharm
- HTML Parser
Archives
- Today
- Total
탐비의 개발 낙서장
[Kotlin] 코틀린 Coroutine 동작 본문
Coroutine 구조
일반적으로 사용했던 GlobalScope의 launch라는 코루틴 빌더는 launch하도록 했다. 이 말은 Global이 의미하는 것 처럼, 새롭게 launch된 코루틴은 해당 어플리케이션 전체의 생명주기에 적용된다는 말이 됩니다.
runBlocking을 사용하는 것 역시 새로운 코루틴을 생성하는 것으로, 해당 상황에서 자신이 속한 스레드를 블로킹시켜 코루틴 작업이 지속될 수 있도록 합니다.
job은 어떠한 코루틴의 생명주기에 일을 처리하고 종료하기 위해 사용됩니다. 상위 코루틴에 join을 하게되면 해당 코루틴이 제 기능을 다 완수할 때 까지 코루틴이 기다리게 됩니다.
suspend와 resume은 콜백을 대체하기 위해 같이 쓰입니다.
주의할 점은 suspend를 적어준다고 해서 함수를 백그라운드 스레드에서 실행시킨다는 뜻은 아닙니다. 코루틴은 기본적으로 메인 스레드 위에서 돌게되며, 너무 오래 걸리는 작업을 하기 위해서는 코루틴을 Default 또는 IO Dispatcher에 의해 관리되도록 해야합니다.
메인 스레드 위에서 실행되더라도 꼭 Dispatcher에 의해 동작해야 합니다. 어떤 스레드에서 해당 코루틴을 실행할지 명시하기 위해, 개발자가 선택하여 Dispather를 지정해 주게 됩니다.
Coroutine 사용하기
Coroutine 디버깅
Build -> Edit Configuration -> VM Options [-Dkotlinx.coroutines.debug] 추가 하면 실행 스레드 + 코루틴 확인이 가능합니다.
fun <T>println(msg: T){ kotlin.io.println("$msg [${Thread.currentThread().name}]") }
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] Http 요청 응답 분석 (0) | 2021.08.09 |
---|---|
[Kotlin] 코틀린 객체지향 설계 (0) | 2021.08.05 |
[Kotlin] 코틀린 Coroutine 기본 요소 (0) | 2021.08.03 |
[Kotlin] Observer 패턴과 Publisher-Subscriber 패턴 (0) | 2021.08.03 |
[Kotlin] 코틀린 Timer (0) | 2021.08.02 |