동시성 프로그래밍의 종류

  • Threading
  • Callback
  • Futures, Promise
  • Reactive Programming
  • Coroutine

코루틴이란?

runBlocking

  • 예제

suspend fun

scope builder coroutineScope

differenece runBlocking and coroutineScope

  • runBlocking 메소드는 현재 쓰레드를 블록한다.
  • 반면 coroutineScope 는 다른 작업을 위해 suspend하고, 주 메소드를 해제한다.
  • 그런 이유로 runblocking 은 일반 function이고, coroutine scope는 suspend function 이다

Scope builder and concurrency

  • coroutineScope Builder는 다중 동시처리 테스크를 수행하기 위해 suspend function 내부에 중첩해서 사용을 할 수 있다.
fun main() = runBlocking {
  multiWorld()
  println("Done")
}

suspend fun multiWorld() = coroutineScope {
  launch {
    delay(2000L)
    println("second")
  }

  launch {
  	delay(1000L)
    println("first")
  }
  println("init")
}

init
first
second
Done

variable Job

  • launch 코루틴 빌더는 Job을 반환한다.
  • 이 Job은 실행된 코루틴을 핸들링하고, 작업이 완료될 때까지 기다리는데 사용될 수 있다.
  • 예를들면 아래와 같이 하위 코루틴이 완료될 떄까지 기다릴 수 있다. 그리고 나서 Done을 출력한다.
suspend fun explicitJob() = coroutineScope {
    val job = launch {
        delay(1000L)
        println("World")
    }

    println("hello")
    job.join() // 하위 코루틴이 완료될 때까지 기다림.
    println("Done")
}