코루틴 혼자 편히 보기 위해 정리한글
코루틴은 쓰레드가 아닙니다.
메모리에 로드된 프로그램 = 프로세스
프로세스는 독립된 실행흐름을 가진다 -> 이 실행흐름이 쓰레드
프로세스가 가지는 메모리는?
두개로 나누자 컴파일, 런타임 메모리 할당
컴파일시 결정
- CODE - 함수, 제어문, 상수
- DATA - 초기화된 전역변수
- BSS - 초기화 안된 전역변수
런타임
- HEAP - 동적할당된 메모리( C로치면 mAlloc() )
- STACK - 지역변수
가장 큰 차이는?
쓰레드는 스택 할당받고 코루틴은 프로세스의 할당된 Heap 영역을 씀
쓰레드 - 병행성, 코루틴 - 동시성
3개의 쓰레드가 해야할 작업을 코루틴 3개로 대체하면 쓰레드마다 할당해야 했던 스택 메모리를 코루틴에서는 할당할 필요가 없음
-> 메모리 사용량 줄어듬
3개의 쓰레드 작업시 처리 순서를 정해야되는데 여기서 문맥교환 하면서 오버헤드 남, 근데 코루틴은 힙을 쓰니깐 동일한 메모리 동일한곳에서 사용 context switching 비용이 없음
- 코루틴
상태 저장하여 중단했다가 재개가능, 코루틴은 실행되거나 실행 안될수도
job은 취소가능한 작업단위
코루틴은 순차적으로 작성된 코드가
비동기 동시성으로 실행되게 할 수 있고
다른 코루틴이 작업을 끝날때까지 기다려야하는 시기도 표시할 수 있다.
- launch
취소가능한 job 객체에 래핑된 닫힌 코드에서 코루틴을 만듬
반환 값이 코루틴의 범위 밖에서 필요하지 않을때 씀
- runBlocking
현재 스레드 차단 -> ANR 때문에 테스트 말곤 안쓰는걸로
- async
키워드 붙이면 Deferred유형의 값을 반환
즉시 값을 반환하는 것처럼 함수를 계속 호출 가능하지만
비동기 작업이라 언제 반환될지는 몰라서 그냥
이 값이 이 타입이다 표시만 해줌
다만 객체의 값이 반환된다고 보장함
비동기라 실행 차단하거나 기다리는거 없음
(값은 반환 됨 언제 나올지 모를뿐)
async코드서 출력을 기다리려면
코드에서 await 호출 그러면 값 반환됨
Author And Source
이 문제에 관하여(코루틴 혼자 편히 보기 위해 정리한글), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kcj351/코루틴-혼자-편히-보기-위해-정리한글저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)