
(쓰레드나 코루틴은 각자의 방법으로 동시성을 보장하는 기술이다. 코루틴은 Thread를 대체하는 기술은 아니다. 하나의 Thread를 더욱 잘개 쪼개서 사용하는 기술.
코루틴은 쓰레드보다 CPU 자원을 절약하기 때문에 Light-Weight Thread라고 한다.
구글에서는 코틀린의 코루틴 사용을 적극 권장하고 있다.
⇒ 프로세스>쓰레드>코루틴)
① “스위칭”이 중요한 개념이다. (정보 교환)
https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98
② 쓰레드
ⓐ 작업 하나하나의 단위 : Thread
ⓑ 동시성 보장 수단 : Context Switching (OS관여)
③ 코루틴
ⓐ 작업 하나하나의 단위 : Coroutine Object
- 여러 작업 각각에 [Task] Object를 할당
- Coroutine Object도 엄연한 객체이기 때문에 JVM Heap에 적재 (코틀린 기준)
(객체를 만들면 특정 메모리에 적재한다.)
ⓑ 동시성 보장 수단 : Programmer Switching (No-Context Switching) (OS관여 X)
- 프로그래머들이 소스 코드를 통해 Switching 시점을 마음대로 정할 수 있다.
- Suspend (Non-Blocking)
- Object 1이 Object 2의 결과를 기다릴 때 Object 1의 상태는 Suspend로 바뀜
- Object1 은 블록킹 되어도 Object 1을 수행하던 Thread는 그대로 유효(코루틴 차원이기 때문)
- 그래서 Object 2도 Object 1과 동일한 Thread에서 실행된다.
