- Kotlin 1.9.21
- JDK 17
루틴 | 코루틴 |
---|---|
시작되면 끝날 때까지 멈추지 않는다. | 중단되었다가 재개될 수 있다. |
한 번 끝나면 루틴 내의 정보가 사라진다. | 중단되더라도 루틴 내의 정보가 사라지지 않는다. |
스레드 | 코루틴 | |
---|---|---|
개념 | 프로세스보다 작은 개념 | 스레드보다 작은 개념 |
한 스레드는 오직 한 프로세스에만 포함되어 있다. | 한 코루틴의 코드는 여러 스레드에서 실행될 수 있다. | |
Context switching | context switching 발생 시, stack 영역이 교체된다. | (한 스레드에서 실행하는 경우) context switching 발생 시 메모리 교체가 없다. |
양보 | OS가 스레드를 강제로 멈추고 다른 스레드를 실행한다. | 코루틴 스스로가 다른 코루틴에게 양보(yield() )한다. |
- 코루틴이 탄생할 수 있는 영역
- 코루틴과 관련된 데이터를 보관
- 가장 기본적인 디스패처, CPU 자원을 많이 쓸 때 권장
- 별다른 설정이 없으면 이 디스패처가 사용됨
- I/O 작업에 최적화된 디스패처
- 보통 UI 컴포넌트를 조작하기 위한 디스패처
- 안드로이드 같은 UI가 필요한 프로젝트에서 사용
- 코루틴이 중지 되었다가 재개 될 수 있는 지점
- 코루틴 suspend 함수 동작원리는 Continuation Passing Style (CPS) 원리에 따라 동작된다.