[인프런] 2시간으로 끝내는 코루틴 - 1~2강 정리
in Blog / Kotlin on Coroutine
안녕하세요, 해을입니다🦖
코루틴 복습 차원에서 인프런 강의 중 ‘2시간으로 끝내는 코루틴’ 강의를 수강하게 되었는데요.
이번 글에서는 코루틴 기초 섹션 내 1~2강내용을 정리해보겠습니다!
💡1강. 루틴과 코루틴
🍀 정의
routine컴퓨터 공학에서 말하는 루틴은 간단히 말해 함수
co-routineco는 ‘협력하는’이라는 뜻으로, 서로 협력하며 실행을 주고받을 수 있는 루틴(함수)
🥨 루틴 예시
fun main() {
println("START")
newRoutine()
println("END")
}
fun newRoutine() {
val num1 = 1
val num2 = 2
println("${num1 + num2}")
}
START
3
END
- 루틴은 진입 지점이 하나
- 루틴이 종료되면 해당 루틴에서 사용하던 지역 정보는 모두 사라짐
🥨 코루틴 예시
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield()
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield()
println("${num1 + num2}")
}
START
END
3
- 코루틴은 상황에 따라 중단과 재개가 일어남
- 완전히 종료되기 전까지는 사용했던 정보가 메모리에서 제거되지 않음
🍀 코루틴 사용하기
🥨 의존성 추가
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
🥨 코루틴 함수
runBlocking새로운 코루틴을 만드는 함수, 일반 함수와 코루틴을 연결하는 함수
launch새로운 코루틴을 만드는 함수, 주로 반환 값이 없는 코루틴을 만드는데 사용
yield()지금 코루틴의 실행을 잠시 멈추고 다른 코루틴이 실행되도록 양보
suspend fun다른 suspend fun을 호출 가능
🥨 루틴과 코루틴의 차이
루틴
- 실행되면 끝날 때까지 멈추지 않음
- 종료되면 루틴 내부 상태는 모두 사라짐
코루틴
- 실행 도중 중단과 재개 가능
- 중단되어도 내부 상태 유지
💡2강. 스레드와 코루틴
🥨 정의
프로세스(process)- 컴퓨터에서 실행되고 있는 프로그램
스레드(thread)- 프로세스보다 작은 개념. 여러 코드를 동시에 실행할 수 있도록 해줌
- 한 프로세스가 여러 개의 스레드를 갖고 있는 경우 => 멀티스레드 환경
코루틴- 스레드보다 작은 개념
🥨 스레드-코루틴 차이
프로세스-스레드- 스레드는 프로세스를 바꿀 수 없음
스레드-코루틴- 코루틴은 중단되었다가 재개될 때 다른 스레드에 배정 가능
🥨 Context Switching 과정
프로세스- 프로세스는 각각 독립된 메모리 영역을 갖고 있기 때문에 프로세스로 실행이 변경되면 힙/스택 영역 모두 교체되어야 함
- context switching 비용이 가장 큼
스레드- 스레드는 독립된 스택 영역을 갖고 있지만, 힙 영역을 공유하고 있기 때문에 실행이 변경되면 스택 영역만 교체
- 프로세스보다는 context switching 비용이 적음
코루틴- 1번 코루틴과 2번 코루틴이 같은 스레드에서 실행될 수 있음
- 동일한 스레드에서 코루틴이 실행되면, 메모리 전부를 공유하므로 스레드보다도 context switching 비용이 적음
🥨 동시성
스레드 동시성- 동시성을 위해 여러 개의 스레드가 필요
코루틴 동시성- 여러 코루틴은 하나의 스레드에서 번갈아 실행될 수 있기 때문에 단 하나의 스레드만으로도 동시성 확보 가능
🥨 선점형
스레드(선점형)- OS가 강제로 실행을 중단시키고 다른 스레드 실행
코루틴(비선점형)yield()함수와 같이 스스로가 다른 코루틴에게 자리를 양보 가능
.
이번 글에서는 1~2강 내용인 코루틴의 가장 기본적인 개념들을 정리해봤습니다.
아직은 개념 위주라 어렵게 느껴질 수 있지만, 뒤쪽 강의들을 따라가다 보면 자연스럽게 연결되는 느낌이 들더라구요!
다음 글에서는 코루틴 기초의 나머지인 3~5강을 정리해보겠습니다.
끝!🦕
.
👍 참고