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 |
댓글