Coroutine이란?
fun main(): Unit = runBlocking {
println("Start")
launch {
newRoutine()
}
yield()
println("End")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield()
println("${num1 + num2}")
}
runBlocking : 일반세계와 코루틴 세계를 연결한다. 이 함수 자체로 새로운 코루틴을 만든다고 생각하면 된다~!
launch : 반환값이 없는 코루틴을 만든다.
suspend fun : 다른 suspend fun 을 호출할 수 있다.
yield : 지금 코루틴을 중단하고 다른 코루틴이 실행되도록 한다. (스레드를 양보한다)

루틴과 코루틴의 차이 정리:
- Routine: 시작되면 끝날 때 까지 멈추지 않는다. 한 번 끝나면 루틴 내의 정보가 사라진다.
- Coroutine: 중단되었다가 재개될 수 있다. 중단되더라도 루틴 내의 정보가 사라지지 않는다.
Thread와 Coroutine
- Coroutine은 스레드보다 작은 개념이다.
- Coroutine은 코드의 종류 중 하나이기 때문에 코루틴 코드가 실행되려면 스레드가 있어야만 한다.
- 그러나 코루틴은 중단되었다가 재개될 수 있기 때문에, 코루틴 코드의 앞부분은 1번 스레드에 배정되고, 뒷부분은 2번 스레드에 배정될 수 있다. (서로 다른 스레드에 배정될 수 있음)
- 동일 스레드에서 코루틴이 실행되면, 메모리 전부를 공유하므로 스레드보다
Context Switching 비용이 낮다.
- 하나의 스레드에서도 동시성을 확보할 수 있다.