TIL

1강 루틴과 코루틴

코루틴이란?

fun main() {
  println("START")
  newRoutine()
  println("END")
}

fun newRoutine() {
  val num1 = 1
  val num2 = 2
  println("${num1 + num2}")
}

코루틴 사용해보기

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2")
}
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
  1. main 코루틴이 runBlocking에 의해 실행되고 “START”가 출력
  2. launch에 의해 코루틴이 생기지만 newRoutine 실행은 바로 일어나지 않는다.
  3. main 코루틴 안에서 yield()가 되면 mainnewRoutine 코루틴에게 실행을 양보하여 launch가 만든 새로운 코루틴이 실행된다.
  4. newRoutine은 다시 yield()를 호출하고 main 코루틴으로 돌아온다.
  5. main 루틴은 “END”를 출력하고 종료된다.
  6. 아직 newRoutine이 종료되지 않았으니 3을 출력하고 종료된다.
fun printWithThread(str: Any) {
  println("[${Thread.currentThread().name}] $str")
}
[main @coroutine#1] START
[main @coroutine#1] END
[main @coroutine#2] 3