본문 바로가기
IT개발/Kotlin

코루틴

by xground 2020. 1. 7.
반응형

https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html

 

Coroutines Guide - Kotlin Programming Language

 

kotlinlang.org

 

코루틴은 동시 실행 설계 패턴이다.

코틀린 1.3에 추가 되었음.

 

  • 기본 스레드를 차단하여 앱이 정지될 수 있는 장기 실행 작업을 관리합니다.
  • 기본 스레드에서 네트워크 또는 디스크 작업을 안전하게 호출하는 기능을 제공

 

Coroutine : cooperative routine

 

kotlinx.coroutines.*

 

비동기 스레드 처리

 

스레드가 특정 "정지 지점"에서 코루틴 실행을 중지하고 다른 작업을 수행 할 수 있다는 것이다. 나중에 코루틴을 다시 시작하거나 다른 스레드가 처리할 수 있다.

 

하나의 작업이 아니라 오히려 하위 작업이다.

 

코루틴은 스레드와 비슷하지만 스레드와는 다르다. 코루틴은 가벼운 스레드이다 즉 스레드를 새로 생성하면서 CPU 자원을 사용하지만 코루틴은 호출된 스레드에서 주로 사용되어 JVM HEap memory에서만 object로 존재한다. 코루틴은은 특정 스레드에서실행되기 때문에 concurrency하게 동작하면서 parallerl하게 동작하듯이 보일 수 있다.

1000개의 스레드를 만들 때 보다 1000개의 코루틴 인스턴스를 만드는 것이 훨씬 저렴하다.

 

suspending functions

 

 

  • CoroutineScope (GlobalScope)
    • 코루틴의 범위 블록의 묶음으로 제어할 수 있는 단위
    • GlobalScope는 CoroutineScope의 한 종류, 프로그램 전반에 걸쳐 백그라운드에서 동작
  • CoroutineContext
    • Coroutine 처리에 대한 여러가지 정보의 집합 (Job, dispatcher 가 있다.)
  • Dispatcher
    • 어떤 스레드를 이용해서 어떻게 동작할것인지 미리 정의
    • 주요 Dispatcher
      • Dispatchers.Default : CPU 사용량이 많은 작업에 적합, 주 스레드에서 작업하기에는 너무 긴 작업
      • Dispatchers.IO : 네트웍, 디스크 작업에 최적화
      • Dispatchers.Main : UI 스레드(안드로이드)
      • Dispatchers.Unconfined
  • launch (async)

 

 

코루틴의 시작

2가지 방법으로 시작할 수 있다.

  • launch
    • 새 코루틴을 시작하고 호출자에게 결과를 반환하지 않는다. 실행 후 망각(fire and forget)으로 간주되는 몯ㄴ 작업은 launch를 사용하여 시작할 수 있다.
  • async
    • 새 코루틴을 시작하고 await 정지 함수를 사용하여 result를 반활할 수 있다.

 

 

 

 

코루틴 종류

https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-dispatchers/index.html

 

Dispatchers - kotlinx-coroutines-core

Dispatchers Groups various implementations of CoroutineDispatcher. Properties Default The default CoroutineDispatcher that is used by all standard builders like launch, async, etc if neither a dispatcher nor any other ContinuationInterceptor is specified i

kotlin.github.io

 

반응형

'IT개발 > Kotlin' 카테고리의 다른 글

Kotlin design pattern  (0) 2020.01.13
Kotlin의 null 처리  (0) 2020.01.09
Kotlin 유용한 함수  (0) 2019.12.19

댓글