Cute Apple
본문 바로가기
개발/Android

[Android] Coroutines vs Thread

by 미댕댕 2022. 8. 13.

Coroutines과 Thread 의 차이

Thread

  • Task 단위 = Thread
    • 각 작업에 Thread 자체를 할당
    • 각 Thread 자체는 Stack 메모리를 가지며, JVM Stack 영역 차이
  • Context Switching
    • blocking : Thread1이 Thread2 의 결과가 나올떄까지 기다려야 한다면 Thread1은 Blocking되어 사용하지 못함

 

Coroutines

  •  Task 단위 = Object(Coroutine)
    • 각 작업에 Object(Coroutine)을 할당
    • Coroutine은 객체를 담는 JVM Heap 에 적재
  • Context Switching => No Context Switching🙅‍♀️
    • 코드를 통해 Switching 시점 보장
    • Suspend is NonBlocking : Coroutine1 이 Coroutine2의 결과가 나올때까지 기다려야 한다면 Coroutine1은 Suspend 되지만, Coroutine1 이 수행하던 Thread는 유효
    • => 같은 Thread 에서 Coroutine1 , 2 실행가능

 

 

 

Coroutines 의 요소들

Suspend(일시중단 함수)

  • 앞에 suspend 키워드를 붙여서 함수를 구성하는 방법
  • 람다를 구성하여 다른 일시중단 함수를 호출 (runBlocking{..})

 

Coroutine Dispatcher

  • 코루틴을 시작하거나 재개할 쓰레드를 결정하기 위한 도구
  • 모든 Dispatcher는 CoroutineDispatchrer 인터페이스를 구현해야함

 

Coroutine Builder 

async()

  • 결과가 예상되는 코루틴 시작에 사용(결과 반환)
  • 전역으로 예외처리 가능
  • 결과, 예외 반환 가능한 Defered<T> 반환

launch()

  • 결과를 반환하지 않는 코루틴 시작에 사용(결과 반환 X)
  • 자체/자식 코루틴 실행을 취소 할 수 있는 Job 반환

runBlocking()

  • Blocking 코드를 일시 중지(Suspend) 가능한 코드로 연결하기 위한 용도
  • main함수나 Unit Test 에 많이 사용됨
  • 코루틴의 실행이 끝날때까지 현재 쓰레드를 차단함

 

 

 

 

반응형

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

[Android] Database Inspector  (0) 2022.08.16
[Android] Unsolved reference  (0) 2022.08.15
[Android] PendingIntent 와 getBroadcast()  (0) 2022.08.11
[Android] ExoPlayer2 사용기  (0) 2022.08.10
[Android] FragmentManager란?  (0) 2022.08.09

댓글