Routine (루틴)
특정한 일을 하기 위한 일련의 명령(함수)
Subroutine (서브루틴)
함수 내에서 실행되는 다른 함수
루틴과 서브루틴
fun main() = runBlocking<Unit> {
mainRoutine() // main의 서브루틴
}
fun mainRoutine() {
mainSubRoutine1() // mainRoutine의 서브루틴
mainSubRoutine2() // mainRoutine의 서브루틴
}
fun mainSubRoutine1() { ... }
fun mainSubRoutine2() { ... }
서브루틴 특징
한 번 호출되면 끝까지 실행
서브루틴 실행 시 스레드가 사용되어 서브루틴 종료시까지 루틴은 다른 작업 X
Coroutine (코루틴)
함께(Co) 실행되는 루틴
스레드 사용을 양보하며 함께 실행
fun main() = runBlocking<Unit> {
launch {
var i = 0
while (i < 10) {
i++
println("자식 코루틴에서 작업 실행 중")
yield() // 스레드 권한 양보
}
}
var i = 0
while (i < 10) {
i++
println("부모 코루틴에서 작업 실행 중")
yield() // 스레드 권한 양보
}
}
// 결과
부모 코루틴에서 작업 실행 중
자식 코루틴에서 작업 실행 중
부모 코루틴에서 작업 실행 중
자식 코루틴에서 작업 실행 중
...
Subroutine (서브루틴) vs Coroutine (코루틴)
서브루틴은 한 번 실행되면 완료될 때까지 스레드 사용
코루틴은 스레드 사용 권한을 양보하며 함께 실행
'코루틴' 카테고리의 다른 글
[코루틴] 공유 상태를 사용하는 코루틴 (1) | 2024.09.22 |
---|---|
[코루틴] 코루틴의 스레드 동작 (0) | 2024.09.21 |
[코루틴] 일시 중단 함수 - suspend (0) | 2024.09.18 |
[코루틴] 예외 처리 (0) | 2024.09.16 |
[코루틴] 구조화된 동시성 (0) | 2024.09.08 |