
<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
Co(함께, 서로) + Routine(규칙적 일의 순서, 작업의 집합)
즉, 함께 동작하며 규칙이 있는 일의 순서를 뜻함
</aside>
실행의 지연과 재개를 허용함으로 써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화 한 컴퓨터 프로그램 구성 요소 - 위키디피아 -


Subroutine
Coroutine

선점형 사진 - velog.io/@zero_mountain

비선점형 사진 - velog.io/@zero_mountain
선점형 (ex. Thread)
하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 강제로 차지할 수 있음
비선점형 (ex. Coroutine)
하나의 프로세스가 CPU를 할당받으면 해당 프로세스가 종료되기 전까지 다른 프로세스가
CPU를 강제로 차지할 수 없음
// 비선점형
import kotlinx.coroutines.*
fun main() =
runBlocking {
// 공부 시작 (asyncStartStudy)
val job1 = launch {
asyncStartStudy()
}
job1.join() // 끝날 때까지 기다림 (협력적 스케줄링)
// 한맥 시작
startHanmac()
// 발표 시작
launch {
asyncDoPresentation { speakingHong() }
}.join()
}
suspend fun asyncStartStudy() {
println("공부 시작 - ${Thread.currentThread().name}")
delay(100) // 협력적 전환 포인트
println("공부 끝 - ${Thread.currentThread().name}")
}
suspend fun startHanmac() {
println("한맥 시작 - ${Thread.currentThread().name}")
delay(50)
}
suspend fun asyncDoPresentation(block: suspend () -> Unit) {
println("발표 시작 - ${Thread.currentThread().name}")
block()
println("발표 끝 - ${Thread.currentThread().name}")
}
suspend fun speakingHong() {
println("hong 말하는 중 - ${Thread.currentThread().name}")
delay(50)
}