본문 바로가기

안드로이드

[안드로이드] Coroutine

728x90
반응형

AsyncTask

  • 손쉬운 비동기 프로그래밍
  • 메모리 누수 등 문제
  • 대체제로 코루틴 권장

루틴

  • 메인루틴
  • 서브루틴
  • 코루틴

프로그램의 흐름

코루틴과 스레드

  • 메모리 구조의 차이
    • 할당 / 공유
  • 수행 방식의 차이
    • 선점형 / 비선점형
    → 코루틴은 동시성은 있지만 병행성은 없다. 실제로 두개 이상의 스레드에서 병렬적으로 실행되지는 않는다. 다만, 스레드 전환이 빠르다.
  • 코루틴의 장점
    • 메모리 / 오버헤드
    → 코루틴은 분리된 stack 메모리를 사용하지 않고 공유된 Heap 을 사용하므로 Context Switching 을 할 필요가 없으므로 사용하는 메모리가 적어지고 오버헤드도 줄어든다
  • → 하나의 스레드 안에서 여러개의 코루틴을 사용할 수 있으므로 불필요하게 스레드를 여러개 생성할 필요가 없어진다.
  • 코루틴의 사용
    • suspend → 멈출 수 있는 함수라는 예약어 사용

코루틴의 구조

1. Coroutine Scope

2. Coroutine Context

  • Dispatchers
    • Default - cpu 연산
    • IO - file, network io
    • Main - ui thread
    • Unconfined
  • Job → 흐름제어 가능
    • States
    • mothods - cancel, join, start

3. Coroutine Builder

  • launch - Job 객체 반환
  • async - Deferred 객체 반환
  • runBlocking - 사용X
  • withContext - Dispatcher switch

코루틴 지연

  • delay
  • join
  • await

코루틴 취소

  • cancel
  • cancelAndJoin
  • withTimeout
  • withTimeoutOrNull

정리

코루틴이란 스레드가 아니다 스레드와 비교하면 메모리를 덜 사용하고 오버헤드가 적은 경량의 비동기 프로그래밍을 수행할 수 있게 하는 모듈이다.

  • CoroutineScope 사용한다.
  • CPU 작업인지 IO 작업인지 판단하여 Default or IO 선택하여 사용한다.
  • 코루틴 처리 후 값이 나와야 하는지 아닌지 판단하여 async 또는 launch 로 빌드를 한다.
728x90
반응형