코루틴
[코루틴] 코루틴(Coroutine)과 서브루틴(Subroutine)
kancho
2024. 9. 20. 22:53
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 (코루틴)
서브루틴은 한 번 실행되면 완료될 때까지 스레드 사용
코루틴은 스레드 사용 권한을 양보하며 함께 실행