코루틴 혼자 편히 보기 위해 정리한글

모바일깐부·2021년 11월 14일
0
post-thumbnail
코루틴은 쓰레드가 아닙니다.

메모리에 로드된 프로그램 = 프로세스

프로세스는 독립된 실행흐름을 가진다 -> 이 실행흐름이 쓰레드

프로세스가 가지는 메모리는?

두개로 나누자 컴파일, 런타임 메모리 할당

컴파일시 결정

  1. CODE - 함수, 제어문, 상수
  2. DATA - 초기화된 전역변수
  3. BSS - 초기화 안된 전역변수

런타임

  1. HEAP - 동적할당된 메모리( C로치면 mAlloc() )
  2. STACK - 지역변수

가장 큰 차이는?

쓰레드는 스택 할당받고 코루틴은 프로세스의 할당된 Heap 영역을 씀

쓰레드 - 병행성, 코루틴 - 동시성

3개의 쓰레드가 해야할 작업을 코루틴 3개로 대체하면 쓰레드마다 할당해야 했던 스택 메모리를 코루틴에서는 할당할 필요가 없음
-> 메모리 사용량 줄어듬

3개의 쓰레드 작업시 처리 순서를 정해야되는데 여기서 문맥교환 하면서 오버헤드 남, 근데 코루틴은 힙을 쓰니깐 동일한 메모리 동일한곳에서 사용 context switching 비용이 없음

  1. 코루틴

상태 저장하여 중단했다가 재개가능, 코루틴은 실행되거나 실행 안될수도

job은 취소가능한 작업단위

코루틴은 순차적으로 작성된 코드가

비동기 동시성으로 실행되게 할 수 있고

다른 코루틴이 작업을 끝날때까지 기다려야하는 시기도 표시할 수 있다.

  • launch

취소가능한 job 객체에 래핑된 닫힌 코드에서 코루틴을 만듬

반환 값이 코루틴의 범위 밖에서 필요하지 않을때 씀

  • runBlocking

현재 스레드 차단 -> ANR 때문에 테스트 말곤 안쓰는걸로

  • async

키워드 붙이면 Deferred유형의 값을 반환

즉시 값을 반환하는 것처럼 함수를 계속 호출 가능하지만

비동기 작업이라 언제 반환될지는 몰라서 그냥

이 값이 이 타입이다 표시만 해줌

다만 객체의 값이 반환된다고 보장함

비동기라 실행 차단하거나 기다리는거 없음
(값은 반환 됨 언제 나올지 모를뿐)

async코드서 출력을 기다리려면

코드에서 await 호출 그러면 값 반환됨

profile
안드로이드 개발자

0개의 댓글